拦截器相关优化,用户可以自定义添加拦截器并且实现相关能力

This commit is contained in:
wind 2024-07-29 11:19:36 +08:00
parent 5020771a7a
commit 8ec8cf8bd6
5 changed files with 44 additions and 15 deletions

View File

@ -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;
}
}

View File

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

View File

@ -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
* <p> 添加手机号验证器手机号验证器只且只能存在一个如果重复置入则会替换先前的验证器
* 如果在验证器之后还需进行额外操作请参考使用前置拦截器进行处理
* @param phoneVerify 手机号验证器
* @author :Wind
*/
public static void setPhoneProcessor(PhoneVerify phoneVerify) {
PROCESSORS.forEach(processor -> {
if (processor instanceof CoreMethodParamValidateProcessor){
((CoreMethodParamValidateProcessor) processor).setPhoneVerify(phoneVerify);
}
});
}
/*
* @see SuppotFilter
*/

View File

@ -32,9 +32,20 @@ public class CoreMethodParamValidateProcessor implements CoreMethodProcessor {
this.phoneVerify = phoneVerify;
}
/**
* setter
* <p> 用于设置手机号验证器可以在通过重写验证器规则来实现自己的验证器逻辑
* <p> 默认验证规则仅仅验证手机号是否为空和手机号是否为11位
* @param phoneVerify 手机号验证器
* @author :Wind
*/
public void setPhoneVerify(PhoneVerify phoneVerify) {
this.phoneVerify = phoneVerify;
}
@Override
public int getOrder() {
return -1;
return -100;
}
@Override

View File

@ -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<PhoneVerify> 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<String, Map<String, Object>> blendsInclude = new ConfigCombineMapAdaptor<String, Map<String, Object>>();