From 8ec8cf8bd65b27f714286119013239b3afafb289 Mon Sep 17 00:00:00 2001 From: wind Date: Mon, 29 Jul 2024 11:19:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8B=A6=E6=88=AA=E5=99=A8=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=8C=E7=94=A8=E6=88=B7=E5=8F=AF=E4=BB=A5?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E6=B7=BB=E5=8A=A0=E6=8B=A6=E6=88=AA?= =?UTF-8?q?=E5=99=A8=E5=B9=B6=E4=B8=94=E5=AE=9E=E7=8E=B0=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E8=83=BD=E5=8A=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/sms4j/api/proxy/Order.java | 7 ++++--- .../dromara/sms4j/api/verify/PhoneVerify.java | 2 +- .../sms4j/core/proxy/SmsProxyFactory.java | 21 +++++++++++++++++-- .../CoreMethodParamValidateProcessor.java | 13 +++++++++++- .../starter/config/SmsBlendsInitializer.java | 16 +++++++------- 5 files changed, 44 insertions(+), 15 deletions(-) diff --git a/sms4j-api/src/main/java/org/dromara/sms4j/api/proxy/Order.java b/sms4j-api/src/main/java/org/dromara/sms4j/api/proxy/Order.java index c6b49e91..1ad7d795 100644 --- a/sms4j-api/src/main/java/org/dromara/sms4j/api/proxy/Order.java +++ b/sms4j-api/src/main/java/org/dromara/sms4j/api/proxy/Order.java @@ -1,12 +1,13 @@ package org.dromara.sms4j.api.proxy; /** - * 排序接口 - * + * 排序接口 用户拦截器排序并进行有序执行,请注意,排序值应大于等于0。 + * 拦截器的排序依照从小到大的规则进行排序 * @author sh1yu * @since 2023/10/27 13:03 */ public interface Order { - default public int getOrder(){ + + default int getOrder(){ return 999; } } diff --git a/sms4j-api/src/main/java/org/dromara/sms4j/api/verify/PhoneVerify.java b/sms4j-api/src/main/java/org/dromara/sms4j/api/verify/PhoneVerify.java index d5b6cb78..c6c7c233 100644 --- a/sms4j-api/src/main/java/org/dromara/sms4j/api/verify/PhoneVerify.java +++ b/sms4j-api/src/main/java/org/dromara/sms4j/api/verify/PhoneVerify.java @@ -13,7 +13,7 @@ public interface PhoneVerify{ *

用于校验手机号是否合理的规则方法,可以尝试重写此方法以改变规则,例如你可以选择使用正则表达式来进行 * 一系列更加精准和严格的校验,此校验优先级最高,会在黑名单和其他拦截之前执行。 * 当此校验触发时候,将会直接以异常形式进行抛出,并终止后续向厂商请求的动作,故而不会有返回值。 - * 当校验手机号合格时返回 true 否则返回 false + *

当校验手机号合格时应返回 true 否则返回 false * @param phone 被校验的手机号 * @author :Wind */ diff --git a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java index 99c0b92c..f56afb4b 100644 --- a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java +++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsProxyFactory.java @@ -10,6 +10,8 @@ import org.dromara.sms4j.api.proxy.SuppotFilter; import org.dromara.sms4j.api.proxy.aware.SmsBlendConfigAware; import org.dromara.sms4j.api.proxy.aware.SmsConfigAware; import org.dromara.sms4j.api.proxy.aware.SmsDaoAware; +import org.dromara.sms4j.api.verify.PhoneVerify; +import org.dromara.sms4j.core.proxy.processor.CoreMethodParamValidateProcessor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; @@ -19,8 +21,8 @@ import java.util.LinkedList; import java.util.List; /** - * SmsBlend代理工厂 - * + * 代理工厂 + * 可用于增加和移除拦截器 * @author sh1yu * @since 2023/10/27 13:03 */ @@ -63,6 +65,21 @@ public abstract class SmsProxyFactory { return PROCESSORS; } + /** + * setPhoneProcessor + *

添加手机号验证器,手机号验证器只且只能存在一个,如果重复置入则会替换先前的验证器。 + * 如果在验证器之后还需进行额外操作,请参考使用前置拦截器进行处理 + * @param phoneVerify 手机号验证器 + * @author :Wind + */ + public static void setPhoneProcessor(PhoneVerify phoneVerify) { + PROCESSORS.forEach(processor -> { + if (processor instanceof CoreMethodParamValidateProcessor){ + ((CoreMethodParamValidateProcessor) processor).setPhoneVerify(phoneVerify); + } + }); + } + /* * @see SuppotFilter */ diff --git a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/CoreMethodParamValidateProcessor.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/CoreMethodParamValidateProcessor.java index 4e05d2e5..dcf579c1 100644 --- a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/CoreMethodParamValidateProcessor.java +++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/processor/CoreMethodParamValidateProcessor.java @@ -32,9 +32,20 @@ public class CoreMethodParamValidateProcessor implements CoreMethodProcessor { this.phoneVerify = phoneVerify; } + /** + * setter + *

用于设置手机号验证器,可以在通过重写验证器规则来实现自己的验证器逻辑 + *

默认验证规则仅仅验证手机号是否为空和手机号是否为11位 + * @param phoneVerify 手机号验证器 + * @author :Wind + */ + public void setPhoneVerify(PhoneVerify phoneVerify) { + this.phoneVerify = phoneVerify; + } + @Override public int getOrder() { - return -1; + return -100; } @Override diff --git a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java index 6a453de8..6e85edd9 100644 --- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java +++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/config/SmsBlendsInitializer.java @@ -76,14 +76,7 @@ public class SmsBlendsInitializer { this.registerDefaultFactory(); // 注册短信对象工厂 ProviderFactoryHolder.registerFactory(factoryList); - //注册执行器实现 - if(this.smsConfig.getRestricted()){ - SmsProxyFactory.addPreProcessor(new RestrictedProcessor()); - SmsProxyFactory.addPreProcessor(new BlackListProcessor()); - SmsProxyFactory.addPreProcessor(new BlackListRecordingProcessor()); - SmsProxyFactory.addPreProcessor(new SingleBlendRestrictedProcessor()); - } - //如果手机号校验器存在实现,则注册手机号校验器 + //如果手机号校验器存在实现,则注册手机号校验器(暂不可用) ServiceLoader loader = ServiceLoader.load(PhoneVerify.class); if (loader.iterator().hasNext()) { loader.forEach(f -> { @@ -92,6 +85,13 @@ public class SmsBlendsInitializer { } else { SmsProxyFactory.addPreProcessor(new CoreMethodParamValidateProcessor(null)); } + //注册执行器实现 + if(this.smsConfig.getRestricted()){ + SmsProxyFactory.addPreProcessor(new RestrictedProcessor()); + SmsProxyFactory.addPreProcessor(new BlackListProcessor()); + SmsProxyFactory.addPreProcessor(new BlackListRecordingProcessor()); + SmsProxyFactory.addPreProcessor(new SingleBlendRestrictedProcessor()); + } if (ConfigType.YAML.equals(this.smsConfig.getConfigType())) { //持有初始化配置信息 Map> blendsInclude = new ConfigCombineMapAdaptor>();