mirror of
https://gitee.com/dromara/sms4j.git
synced 2025-12-07 17:38:38 +08:00
拦截器相关优化,用户可以自定义添加拦截器并且实现相关能力
This commit is contained in:
parent
5020771a7a
commit
8ec8cf8bd6
@ -1,12 +1,13 @@
|
|||||||
package org.dromara.sms4j.api.proxy;
|
package org.dromara.sms4j.api.proxy;
|
||||||
/**
|
/**
|
||||||
* 排序接口
|
* 排序接口 用户拦截器排序并进行有序执行,请注意,排序值应大于等于0。
|
||||||
*
|
* 拦截器的排序依照从小到大的规则进行排序
|
||||||
* @author sh1yu
|
* @author sh1yu
|
||||||
* @since 2023/10/27 13:03
|
* @since 2023/10/27 13:03
|
||||||
*/
|
*/
|
||||||
public interface Order {
|
public interface Order {
|
||||||
default public int getOrder(){
|
|
||||||
|
default int getOrder(){
|
||||||
return 999;
|
return 999;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -13,7 +13,7 @@ public interface PhoneVerify{
|
|||||||
* <p>用于校验手机号是否合理的规则方法,可以尝试重写此方法以改变规则,例如你可以选择使用正则表达式来进行
|
* <p>用于校验手机号是否合理的规则方法,可以尝试重写此方法以改变规则,例如你可以选择使用正则表达式来进行
|
||||||
* 一系列更加精准和严格的校验,此校验优先级最高,会在黑名单和其他拦截之前执行。
|
* 一系列更加精准和严格的校验,此校验优先级最高,会在黑名单和其他拦截之前执行。
|
||||||
* 当此校验触发时候,将会直接以异常形式进行抛出,并终止后续向厂商请求的动作,故而不会有返回值。
|
* 当此校验触发时候,将会直接以异常形式进行抛出,并终止后续向厂商请求的动作,故而不会有返回值。
|
||||||
* 当校验手机号合格时返回 true 否则返回 false
|
* <p>当校验手机号合格时应返回 true 否则返回 false
|
||||||
* @param phone 被校验的手机号
|
* @param phone 被校验的手机号
|
||||||
* @author :Wind
|
* @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.SmsBlendConfigAware;
|
||||||
import org.dromara.sms4j.api.proxy.aware.SmsConfigAware;
|
import org.dromara.sms4j.api.proxy.aware.SmsConfigAware;
|
||||||
import org.dromara.sms4j.api.proxy.aware.SmsDaoAware;
|
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.InvocationTargetException;
|
||||||
import java.lang.reflect.Method;
|
import java.lang.reflect.Method;
|
||||||
@ -19,8 +21,8 @@ import java.util.LinkedList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SmsBlend代理工厂
|
* 代理工厂
|
||||||
*
|
* 可用于增加和移除拦截器
|
||||||
* @author sh1yu
|
* @author sh1yu
|
||||||
* @since 2023/10/27 13:03
|
* @since 2023/10/27 13:03
|
||||||
*/
|
*/
|
||||||
@ -63,6 +65,21 @@ public abstract class SmsProxyFactory {
|
|||||||
return PROCESSORS;
|
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
|
* @see SuppotFilter
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -32,9 +32,20 @@ public class CoreMethodParamValidateProcessor implements CoreMethodProcessor {
|
|||||||
this.phoneVerify = phoneVerify;
|
this.phoneVerify = phoneVerify;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* setter
|
||||||
|
* <p> 用于设置手机号验证器,可以在通过重写验证器规则来实现自己的验证器逻辑
|
||||||
|
* <p> 默认验证规则仅仅验证手机号是否为空和手机号是否为11位
|
||||||
|
* @param phoneVerify 手机号验证器
|
||||||
|
* @author :Wind
|
||||||
|
*/
|
||||||
|
public void setPhoneVerify(PhoneVerify phoneVerify) {
|
||||||
|
this.phoneVerify = phoneVerify;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getOrder() {
|
public int getOrder() {
|
||||||
return -1;
|
return -100;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -76,14 +76,7 @@ public class SmsBlendsInitializer {
|
|||||||
this.registerDefaultFactory();
|
this.registerDefaultFactory();
|
||||||
// 注册短信对象工厂
|
// 注册短信对象工厂
|
||||||
ProviderFactoryHolder.registerFactory(factoryList);
|
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);
|
ServiceLoader<PhoneVerify> loader = ServiceLoader.load(PhoneVerify.class);
|
||||||
if (loader.iterator().hasNext()) {
|
if (loader.iterator().hasNext()) {
|
||||||
loader.forEach(f -> {
|
loader.forEach(f -> {
|
||||||
@ -92,6 +85,13 @@ public class SmsBlendsInitializer {
|
|||||||
} else {
|
} else {
|
||||||
SmsProxyFactory.addPreProcessor(new CoreMethodParamValidateProcessor(null));
|
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())) {
|
if (ConfigType.YAML.equals(this.smsConfig.getConfigType())) {
|
||||||
//持有初始化配置信息
|
//持有初始化配置信息
|
||||||
Map<String, Map<String, Object>> blendsInclude = new ConfigCombineMapAdaptor<String, Map<String, Object>>();
|
Map<String, Map<String, Object>> blendsInclude = new ConfigCombineMapAdaptor<String, Map<String, Object>>();
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user