From 8549eb428645596a13d78ed85c7f90bbfca0afd4 Mon Sep 17 00:00:00 2001 From: Doghole Date: Tue, 13 May 2025 14:53:00 +0800 Subject: [PATCH] =?UTF-8?q?=E9=AA=8C=E8=AF=81=E7=B1=BB=E7=9A=84=E9=87=8D?= =?UTF-8?q?=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../EmoneyRequestConfigValid.java} | 5 +-- .../EmoneyRequestConfigValidator.java | 3 +- .../rich/emoney/validator/IValidator.java | 14 +++++++ .../emoney/validator/ProxyConfigValid.java | 20 ++++++++++ .../validator/ProxyConfigValidator.java | 39 +++++++++++++++++++ 5 files changed, 76 insertions(+), 5 deletions(-) rename src/main/java/quant/rich/emoney/{interfaces/ValidEmoneyRequestConfig.java => validator/EmoneyRequestConfigValid.java} (77%) create mode 100644 src/main/java/quant/rich/emoney/validator/IValidator.java create mode 100644 src/main/java/quant/rich/emoney/validator/ProxyConfigValid.java create mode 100644 src/main/java/quant/rich/emoney/validator/ProxyConfigValidator.java diff --git a/src/main/java/quant/rich/emoney/interfaces/ValidEmoneyRequestConfig.java b/src/main/java/quant/rich/emoney/validator/EmoneyRequestConfigValid.java similarity index 77% rename from src/main/java/quant/rich/emoney/interfaces/ValidEmoneyRequestConfig.java rename to src/main/java/quant/rich/emoney/validator/EmoneyRequestConfigValid.java index 888982e..e995e2b 100644 --- a/src/main/java/quant/rich/emoney/interfaces/ValidEmoneyRequestConfig.java +++ b/src/main/java/quant/rich/emoney/validator/EmoneyRequestConfigValid.java @@ -1,4 +1,4 @@ -package quant.rich.emoney.interfaces; +package quant.rich.emoney.validator; import java.lang.annotation.Documented; import java.lang.annotation.Target; @@ -8,13 +8,12 @@ import java.lang.annotation.RetentionPolicy; import jakarta.validation.Constraint; import jakarta.validation.Payload; -import quant.rich.emoney.validator.EmoneyRequestConfigValidator; @Documented @Constraint(validatedBy = EmoneyRequestConfigValidator.class) @Target({ ElementType.TYPE }) @Retention(RetentionPolicy.RUNTIME) -public @interface ValidEmoneyRequestConfig { +public @interface EmoneyRequestConfigValid { String message() default "非法的 EmoneyRequestConfig"; Class[] groups() default {}; Class[] payload() default {}; diff --git a/src/main/java/quant/rich/emoney/validator/EmoneyRequestConfigValidator.java b/src/main/java/quant/rich/emoney/validator/EmoneyRequestConfigValidator.java index 296ac58..2861ff8 100644 --- a/src/main/java/quant/rich/emoney/validator/EmoneyRequestConfigValidator.java +++ b/src/main/java/quant/rich/emoney/validator/EmoneyRequestConfigValidator.java @@ -9,9 +9,8 @@ import jakarta.validation.ConstraintValidatorContext; import quant.rich.emoney.entity.config.DeviceInfoConfig; import quant.rich.emoney.entity.config.EmoneyRequestConfig; import quant.rich.emoney.interfaces.IConfig; -import quant.rich.emoney.interfaces.ValidEmoneyRequestConfig; -public class EmoneyRequestConfigValidator implements ConstraintValidator> { +public class EmoneyRequestConfigValidator implements IValidator, ConstraintValidator> { static final Pattern androidIdPattern = Pattern.compile("^[0-9a-f]{16}$"); diff --git a/src/main/java/quant/rich/emoney/validator/IValidator.java b/src/main/java/quant/rich/emoney/validator/IValidator.java new file mode 100644 index 0000000..e0e30f8 --- /dev/null +++ b/src/main/java/quant/rich/emoney/validator/IValidator.java @@ -0,0 +1,14 @@ +package quant.rich.emoney.validator; + +import jakarta.validation.ConstraintValidatorContext; + +public interface IValidator { + + public default boolean invalid(ConstraintValidatorContext context, String message) { + context.disableDefaultConstraintViolation(); + context.buildConstraintViolationWithTemplate(message) + .addConstraintViolation(); + return false; + } + +} diff --git a/src/main/java/quant/rich/emoney/validator/ProxyConfigValid.java b/src/main/java/quant/rich/emoney/validator/ProxyConfigValid.java new file mode 100644 index 0000000..0c982fa --- /dev/null +++ b/src/main/java/quant/rich/emoney/validator/ProxyConfigValid.java @@ -0,0 +1,20 @@ +package quant.rich.emoney.validator; + +import java.lang.annotation.Documented; +import java.lang.annotation.Target; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +import jakarta.validation.Constraint; +import jakarta.validation.Payload; + +@Documented +@Constraint(validatedBy = ProxyConfigValidator.class) +@Target({ ElementType.TYPE }) +@Retention(RetentionPolicy.RUNTIME) +public @interface ProxyConfigValid { + String message() default "非法的 ProxyConfig"; + Class[] groups() default {}; + Class[] payload() default {}; +} diff --git a/src/main/java/quant/rich/emoney/validator/ProxyConfigValidator.java b/src/main/java/quant/rich/emoney/validator/ProxyConfigValidator.java new file mode 100644 index 0000000..3563f69 --- /dev/null +++ b/src/main/java/quant/rich/emoney/validator/ProxyConfigValidator.java @@ -0,0 +1,39 @@ +package quant.rich.emoney.validator; + +import java.net.Proxy; +import java.util.Objects; +import org.apache.commons.lang3.StringUtils; + +import jakarta.validation.ConstraintValidator; +import jakarta.validation.ConstraintValidatorContext; +import quant.rich.emoney.entity.config.ProxyConfig; +import quant.rich.emoney.interfaces.IConfig; + +public class ProxyConfigValidator implements IValidator, ConstraintValidator> { + + @Override + public boolean isValid(IConfig value, ConstraintValidatorContext context) { + + if (value == null) return true; + if (!(value instanceof ProxyConfig config)) return true; + + if (config.getProxyType() != null && config.getProxyType() != Proxy.Type.DIRECT) { + if (StringUtils.isBlank(config.getProxyHost())) { + return invalid(context, "设置代理为 HTTP 或 SOCKS 时,代理地址不允许为空"); + } + if (Objects.isNull(config.getProxyPort()) || config.getProxyPort() <= 0 || config.getProxyPort() > 65535) { + return invalid(context, "端口不合法"); + } + // 非匿名须判断用户名密码是否为空 + boolean valid = ProxyConfig.isProxyEffective( + config.getProxy(), config.getIgnoreHttpsVerification()); + if (!valid) { + return invalid(context, "代理连接失败,请检查"); + } + } + + return true; + + } + +}