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/proxy/SmsProcessor.java b/sms4j-api/src/main/java/org/dromara/sms4j/api/proxy/SmsProcessor.java index e4c26572..9e865770 100644 --- a/sms4j-api/src/main/java/org/dromara/sms4j/api/proxy/SmsProcessor.java +++ b/sms4j-api/src/main/java/org/dromara/sms4j/api/proxy/SmsProcessor.java @@ -1,6 +1,8 @@ package org.dromara.sms4j.api.proxy; +import org.dromara.sms4j.api.entity.SmsResponse; + import java.lang.reflect.Method; /** * 执行器接口 @@ -9,15 +11,39 @@ import java.lang.reflect.Method; * @since 2023/10/27 13:03 */ public interface SmsProcessor extends Order { + /** + * preProcessor + *
前置拦截方法 此方法将在短信发送方法之前进行执行,但请勿在此方法中修改实例对象或者方法对象,否则可能会导致并发问题 + * @param method 方法对象 + * @param source 实例对象 + * @param param 参数列表 + * @author :Wind + */ default Object[] preProcessor(Method method, Object source, Object[] param) { return null; } - default Object postProcessor(Object result, Object[] param) { + /** + * postProcessor + *
后置拦截方法 此方法执行在发送方法执行完毕之后获取到返回值之后 + * @param result 返回值 + * @param param 参数列表 + * @author :Wind + */ + default Object postProcessor(SmsResponse result, Object[] param) { return null; } - default Object exceptionHandleProcessor(Method method, Object source, Object[] param,Exception exception) { - return null; + /** + * exceptionHandleProcessor + *
异常拦截执行器,在发送方法执行过程中发生异常,将会通过此方法进行反馈。 + *
请注意,此方法一旦捕捉到相应异常并抛出新异常后,会中断后续执行器的进行 如果在所有的异常执行器中均没有抛出异常,则后续会进入后置方法执行器 + * @param method 方法对象 + * @param source 实例对象 + * @param param 参数列表 + * @param exception 异常 + * @author :Wind + */ + default void exceptionHandleProcessor(Method method, Object source, Object[] param, Exception exception) throws RuntimeException { } } 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/SmsInvocationHandler.java b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsInvocationHandler.java
index 7465e12f..942a8baf 100644
--- a/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsInvocationHandler.java
+++ b/sms4j-core/src/main/java/org/dromara/sms4j/core/proxy/SmsInvocationHandler.java
@@ -2,12 +2,12 @@ package org.dromara.sms4j.core.proxy;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sms4j.api.SmsBlend;
+import org.dromara.sms4j.api.entity.SmsResponse;
import org.dromara.sms4j.api.proxy.SmsProcessor;
-import org.dromara.sms4j.comm.exception.SmsBlendException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
-import java.util.LinkedList;
+import java.util.Objects;
/**
@@ -19,12 +19,10 @@ import java.util.LinkedList;
@Slf4j
public class SmsInvocationHandler implements InvocationHandler {
private final SmsBlend smsBlend;
- private final LinkedList 移除拦截器
+ * @param processor 拦截器对象
+ * @author :Wind
+ */
+ public static void removePreProcessor(SmsProcessor processor) {
+ PROCESSORS.remove(processor);
+ }
+
+ /**
+ * getProcessors
+ * 获取全部拦截器
+ * @author :Wind
+ */
+ public static LinkedList 添加手机号验证器,手机号验证器只且只能存在一个,如果重复置入则会替换先前的验证器。
+ * 如果在验证器之后还需进行额外操作,请参考使用前置拦截器进行处理
+ * @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/configration/SmsBlendsInitializer.java b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/configration/SmsBlendsInitializer.java
index 057d8a6c..3706798a 100644
--- a/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/configration/SmsBlendsInitializer.java
+++ b/sms4j-spring-boot-starter/src/main/java/org/dromara/sms4j/starter/configration/SmsBlendsInitializer.java
@@ -7,9 +7,10 @@ import lombok.extern.slf4j.Slf4j;
import org.dromara.sms4j.aliyun.config.AlibabaFactory;
import org.dromara.sms4j.api.SmsBlend;
import org.dromara.sms4j.api.universal.SupplierConfig;
+import org.dromara.sms4j.api.verify.PhoneVerify;
import org.dromara.sms4j.baidu.config.BaiduFactory;
import org.dromara.sms4j.budingyun.config.BudingV2Factory;
-import org.dromara.sms4j.api.verify.PhoneVerify;
+import org.dromara.sms4j.chuanglan.config.ChuangLanFactory;
import org.dromara.sms4j.cloopen.config.CloopenFactory;
import org.dromara.sms4j.comm.constant.Constant;
import org.dromara.sms4j.comm.enums.ConfigType;
@@ -29,7 +30,6 @@ import org.dromara.sms4j.dingzhong.config.DingZhongFactory;
import org.dromara.sms4j.emay.config.EmayFactory;
import org.dromara.sms4j.huawei.config.HuaweiFactory;
import org.dromara.sms4j.jdcloud.config.JdCloudFactory;
-import org.dromara.sms4j.chuanglan.config.ChuangLanFactory;
import org.dromara.sms4j.jg.config.JgFactory;
import org.dromara.sms4j.lianlu.config.LianLuFactory;
import org.dromara.sms4j.luosimao.config.LuoSiMaoFactory;
@@ -76,7 +76,22 @@ public class SmsBlendsInitializer {
this.registerDefaultFactory();
// 注册短信对象工厂
ProviderFactoryHolder.registerFactory(factoryList);
-
+ //如果手机号校验器存在实现,则注册手机号校验器(暂不可用)
+ ServiceLoader