mirror of
https://gitee.com/dromara/sms4j.git
synced 2025-12-06 17:08:40 +08:00
拦截器相关优化,用户可以自定义添加拦截器并且实现相关能力
This commit is contained in:
parent
5020771a7a
commit
8ec8cf8bd6
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -13,7 +13,7 @@ public interface PhoneVerify{
|
||||
* <p>用于校验手机号是否合理的规则方法,可以尝试重写此方法以改变规则,例如你可以选择使用正则表达式来进行
|
||||
* 一系列更加精准和严格的校验,此校验优先级最高,会在黑名单和其他拦截之前执行。
|
||||
* 当此校验触发时候,将会直接以异常形式进行抛出,并终止后续向厂商请求的动作,故而不会有返回值。
|
||||
* 当校验手机号合格时返回 true 否则返回 false
|
||||
* <p>当校验手机号合格时应返回 true 否则返回 false
|
||||
* @param phone 被校验的手机号
|
||||
* @author :Wind
|
||||
*/
|
||||
|
||||
@ -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
|
||||
*/
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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>>();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user