feat: SMS 结合工厂+策略模式
This commit is contained in:
@@ -66,11 +66,5 @@
|
||||
<artifactId>schisandra-cloud-storage-auth-api</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.xkcoding</groupId>
|
||||
<artifactId>justauth-spring-boot-starter</artifactId>
|
||||
<version>1.1.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
@@ -1,31 +1,17 @@
|
||||
package com.schisandra.auth.application.config;
|
||||
|
||||
import com.schisandra.auth.application.convert.SchisandraSmsConfigDTOConvert;
|
||||
import com.schisandra.auth.application.dto.SchisandraSmsConfigDTO;
|
||||
import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO;
|
||||
import com.schisandra.auth.domain.service.SchisandraSmsConfigDomainService;
|
||||
import com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig;
|
||||
import org.dromara.sms4j.core.factory.SmsFactory;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.event.ContextRefreshedEvent;
|
||||
import org.springframework.context.event.EventListener;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
@Configuration
|
||||
public class SmsInitConfig {
|
||||
@Resource
|
||||
SmsReadConfig smsReadConfig;
|
||||
@Resource
|
||||
SchisandraSmsConfigDomainService schisandraSmsConfigDomainService;
|
||||
@EventListener
|
||||
public void init(ContextRefreshedEvent event){
|
||||
List<SchisandraSmsConfigBO> SchisandraSmsConfigBOs= schisandraSmsConfigDomainService.queryAll();
|
||||
List<SchisandraSmsConfigDTO> schisandraSmsConfigDTOS = SchisandraSmsConfigDTOConvert.INSTANCE.convertBOToDTOList(SchisandraSmsConfigBOs);
|
||||
for (SchisandraSmsConfigDTO schisandraSmsConfig : schisandraSmsConfigDTOS){
|
||||
if (schisandraSmsConfig!=null){
|
||||
// 创建SmsBlend 短信实例
|
||||
SmsFactory.createSmsBlend(smsReadConfig);
|
||||
};
|
||||
}}
|
||||
public void init(ContextRefreshedEvent event) {
|
||||
SmsFactory.createSmsBlend(smsReadConfig, "alibaba");
|
||||
}
|
||||
}
|
||||
|
@@ -1,19 +1,11 @@
|
||||
package com.schisandra.auth.application.config;
|
||||
|
||||
import com.schisandra.auth.application.convert.SchisandraSmsConfigDTOConvert;
|
||||
import com.schisandra.auth.application.dto.SchisandraSmsConfigDTO;
|
||||
import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO;
|
||||
import com.schisandra.auth.domain.service.SchisandraSmsConfigDomainService;
|
||||
import com.schisandra.auth.infra.basic.dao.SchisandraSmsConfigDao;
|
||||
import com.schisandra.auth.infra.basic.entity.SchisandraSmsConfig;
|
||||
import org.dromara.sms4j.aliyun.config.AlibabaConfig;
|
||||
import org.dromara.sms4j.huawei.config.HuaweiConfig;
|
||||
import com.schisandra.auth.application.factory.SmsTypeHandlerFactory;
|
||||
import com.schisandra.auth.application.handler.SchisandraSmsTypeHandler;
|
||||
import org.dromara.sms4j.provider.config.BaseConfig;
|
||||
import org.dromara.sms4j.tencent.config.TencentConfig;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
@@ -27,62 +19,21 @@ import java.util.List;
|
||||
*/
|
||||
@Component
|
||||
public class SmsReadConfig implements org.dromara.sms4j.core.datainterface.SmsReadConfig {
|
||||
|
||||
|
||||
@Resource
|
||||
SchisandraSmsConfigDomainService schisandraSmsConfigDomainService;
|
||||
private SmsTypeHandlerFactory smsTypeHandlerFactory;
|
||||
|
||||
@Override
|
||||
public BaseConfig getSupplierConfig(String configId) {
|
||||
return null;
|
||||
SchisandraSmsTypeHandler handler = smsTypeHandlerFactory.getHandler(configId);
|
||||
return handler.addConfig(configId);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<BaseConfig> getSupplierConfigList() {
|
||||
List<BaseConfig> configs = new ArrayList<>();
|
||||
List<SchisandraSmsConfigBO> SchisandraSmsConfigBOs= schisandraSmsConfigDomainService.queryAll();
|
||||
List<SchisandraSmsConfigDTO> schisandraSmsConfigDTOS = SchisandraSmsConfigDTOConvert.INSTANCE.convertBOToDTOList(SchisandraSmsConfigBOs);
|
||||
for (SchisandraSmsConfigDTO schisandraSmsConfig : schisandraSmsConfigDTOS){
|
||||
if ("alibaba".equals(schisandraSmsConfig.getConfigId())) {
|
||||
AlibabaConfig alibabaConfig = new AlibabaConfig();
|
||||
alibabaConfig.setConfigId(schisandraSmsConfig.getConfigId());
|
||||
alibabaConfig.setRequestUrl(schisandraSmsConfig.getRequestUrl());
|
||||
alibabaConfig.setAccessKeyId(schisandraSmsConfig.getAccessKeyId());
|
||||
alibabaConfig.setAccessKeySecret(schisandraSmsConfig.getAccessKeySecret());
|
||||
alibabaConfig.setSignature(schisandraSmsConfig.getSignature());
|
||||
alibabaConfig.setTemplateId(schisandraSmsConfig.getTemplateId());
|
||||
alibabaConfig.setTemplateName(schisandraSmsConfig.getTemplateName());
|
||||
alibabaConfig.setSdkAppId(schisandraSmsConfig.getSdkAppId());
|
||||
configs.add(alibabaConfig);
|
||||
}
|
||||
if ("tencent".equals(schisandraSmsConfig.getConfigId())) {
|
||||
TencentConfig tencentConfig=new TencentConfig();
|
||||
tencentConfig.setConfigId(schisandraSmsConfig.getConfigId());
|
||||
tencentConfig.setAccessKeyId(schisandraSmsConfig.getAccessKeyId());
|
||||
tencentConfig.setAccessKeySecret(schisandraSmsConfig.getAccessKeySecret());
|
||||
tencentConfig.setSdkAppId(schisandraSmsConfig.getSdkAppId());
|
||||
tencentConfig.setService(schisandraSmsConfig.getSdkAppId());
|
||||
tencentConfig.setRequestUrl(schisandraSmsConfig.getRequestUrl());
|
||||
tencentConfig.setTerritory(schisandraSmsConfig.getRegion());
|
||||
tencentConfig.setAction(schisandraSmsConfig.getAction());
|
||||
tencentConfig.setSignature(schisandraSmsConfig.getSignature());
|
||||
tencentConfig.setTemplateId(schisandraSmsConfig.getTemplateId());
|
||||
tencentConfig.setVersion(schisandraSmsConfig.getVersion());
|
||||
tencentConfig.setConnTimeout(schisandraSmsConfig.getConnTimeout());
|
||||
tencentConfig.setSdkAppId(schisandraSmsConfig.getSdkAppId());
|
||||
configs.add(tencentConfig);
|
||||
}
|
||||
if ("huawei".equals(schisandraSmsConfig.getConfigId())) {
|
||||
HuaweiConfig huaweiConfig = new HuaweiConfig();
|
||||
huaweiConfig.setConfigId(schisandraSmsConfig.getConfigId());
|
||||
huaweiConfig.setSdkAppId(schisandraSmsConfig.getSdkAppId());
|
||||
huaweiConfig.setAccessKeySecret(schisandraSmsConfig.getAccessKeySecret());
|
||||
huaweiConfig.setAccessKeyId(schisandraSmsConfig.getAccessKeyId());
|
||||
huaweiConfig.setUrl(schisandraSmsConfig.getUrl());
|
||||
huaweiConfig.setSignature(schisandraSmsConfig.getSignature());
|
||||
huaweiConfig.setTemplateId(schisandraSmsConfig.getTemplateId());
|
||||
configs.add(huaweiConfig);
|
||||
}}
|
||||
return configs;
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
|
@@ -1,10 +1,14 @@
|
||||
package com.schisandra.auth.application.controller;
|
||||
|
||||
|
||||
import com.schisandra.auth.application.config.SmsReadConfig;
|
||||
import com.schisandra.auth.application.factory.SmsTypeHandlerFactory;
|
||||
import com.schisandra.auth.application.handler.SchisandraSmsTypeHandler;
|
||||
import com.schisandra.auth.common.entity.Result;
|
||||
import com.schisandra.auth.common.redis.RedisUtil;
|
||||
import com.schisandra.auth.common.utils.SmsCodeUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.dromara.sms4j.api.SmsBlend;
|
||||
import org.dromara.sms4j.api.entity.SmsResponse;
|
||||
import org.dromara.sms4j.core.factory.SmsFactory;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@@ -21,6 +25,8 @@ import static java.util.concurrent.TimeUnit.SECONDS;
|
||||
public class SchisandraSmsController {
|
||||
@Resource
|
||||
private RedisUtil redisUtil;
|
||||
@Resource
|
||||
private SmsReadConfig smsReadConfig;
|
||||
|
||||
private final String authPhonePrefix="auth.phone";
|
||||
/**
|
||||
@@ -35,7 +41,7 @@ public class SchisandraSmsController {
|
||||
String prefix = redisUtil.buildKey(authPhonePrefix, phone);
|
||||
String code = SmsCodeUtils.generateValidateCode(4).toString();
|
||||
if (!redisUtil.exist(prefix)){
|
||||
SmsResponse smsResponse=SmsFactory.getBySupplier("alibaba").sendMessage(phone,code);
|
||||
SmsResponse smsResponse=SmsFactory.getSmsBlend("alibaba").sendMessage(phone,code);
|
||||
if (smsResponse.isSuccess()){
|
||||
redisUtil.setNx(prefix, code, 60L,SECONDS);
|
||||
return Result.ok();
|
||||
|
@@ -0,0 +1,40 @@
|
||||
package com.schisandra.auth.application.factory;
|
||||
|
||||
import com.schisandra.auth.application.handler.SchisandraSmsTypeHandler;
|
||||
import com.schisandra.auth.common.enums.SmsSupplierType;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Classname SmsTypeHandlerFactory
|
||||
* @BelongsProject: schisandra-cloud-storage
|
||||
* @BelongsPackage: com.schisandra.auth.application.factory
|
||||
* @Author: landaiqing
|
||||
* @CreateTime: 2024-05-11 18:36
|
||||
* @Description: TODO
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Component
|
||||
public class SmsTypeHandlerFactory implements InitializingBean {
|
||||
@Resource
|
||||
private List<SchisandraSmsTypeHandler> smsTypeHandlerList;
|
||||
|
||||
private HashMap<SmsSupplierType,SchisandraSmsTypeHandler> handlerMap =new HashMap<>();
|
||||
|
||||
public SchisandraSmsTypeHandler getHandler(String configId){
|
||||
SmsSupplierType smsSupplierType = SmsSupplierType.getByKey(configId);
|
||||
return handlerMap.get(smsSupplierType);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterPropertiesSet() throws Exception {
|
||||
for(SchisandraSmsTypeHandler smsTypeHandler : smsTypeHandlerList){
|
||||
handlerMap.put(smsTypeHandler.getHandlerType(),smsTypeHandler);
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,51 @@
|
||||
package com.schisandra.auth.application.handler;
|
||||
|
||||
import com.schisandra.auth.application.convert.SchisandraSmsConfigDTOConvert;
|
||||
import com.schisandra.auth.application.dto.SchisandraSmsConfigDTO;
|
||||
import com.schisandra.auth.common.enums.SmsSupplierType;
|
||||
import com.schisandra.auth.domain.bo.SchisandraSmsConfigBO;
|
||||
import com.schisandra.auth.domain.service.SchisandraSmsConfigDomainService;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.dromara.sms4j.aliyun.config.AlibabaConfig;
|
||||
import org.dromara.sms4j.provider.config.BaseConfig;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* @Classname AlibabaSmsHandler
|
||||
* @BelongsProject: schisandra-cloud-storage
|
||||
* @BelongsPackage: com.schisandra.auth.application.handler
|
||||
* @Author: landaiqing
|
||||
* @CreateTime: 2024-05-11 18:20
|
||||
* @Description: TODO
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Component
|
||||
public class AlibabaSmsHandler implements SchisandraSmsTypeHandler{
|
||||
@Resource
|
||||
SchisandraSmsConfigDomainService schisandraSmsConfigDomainService;
|
||||
@Override
|
||||
public SmsSupplierType getHandlerType() {
|
||||
return SmsSupplierType.ALIBABA;
|
||||
}
|
||||
|
||||
@Override
|
||||
public BaseConfig addConfig(String configId) {
|
||||
SchisandraSmsConfigBO schisandraSmsConfigBO = schisandraSmsConfigDomainService.queryByConfigId(configId);
|
||||
SchisandraSmsConfigDTO schisandraSmsConfigDTO = SchisandraSmsConfigDTOConvert.INSTANCE.convertBOToDTO(schisandraSmsConfigBO);
|
||||
if (ObjectUtils.isEmpty(schisandraSmsConfigDTO)){
|
||||
return null;
|
||||
}
|
||||
AlibabaConfig alibabaConfig=new AlibabaConfig();
|
||||
alibabaConfig.setConfigId(schisandraSmsConfigDTO.getConfigId());
|
||||
alibabaConfig.setRequestUrl(schisandraSmsConfigDTO.getRequestUrl());
|
||||
alibabaConfig.setAccessKeyId(schisandraSmsConfigDTO.getAccessKeyId());
|
||||
alibabaConfig.setAccessKeySecret(schisandraSmsConfigDTO.getAccessKeySecret());
|
||||
alibabaConfig.setSignature(schisandraSmsConfigDTO.getSignature());
|
||||
alibabaConfig.setTemplateId(schisandraSmsConfigDTO.getTemplateId());
|
||||
alibabaConfig.setTemplateName(schisandraSmsConfigDTO.getTemplateName());
|
||||
alibabaConfig.setSdkAppId(schisandraSmsConfigDTO.getSdkAppId());
|
||||
return alibabaConfig;
|
||||
}
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
package com.schisandra.auth.application.handler;
|
||||
|
||||
import com.schisandra.auth.common.enums.SmsSupplierType;
|
||||
import org.dromara.sms4j.provider.config.BaseConfig;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* @Classname SchisandraSmsTypeHandler
|
||||
* @BelongsProject: schisandra-cloud-storage
|
||||
* @BelongsPackage: com.schisandra.auth.application.handler
|
||||
* @Author: landaiqing
|
||||
* @CreateTime: 2024-05-11 18:04
|
||||
* @Description: TODO
|
||||
* @Version: 1.0
|
||||
*/
|
||||
@Component
|
||||
public interface SchisandraSmsTypeHandler {
|
||||
SmsSupplierType getHandlerType();
|
||||
|
||||
BaseConfig addConfig(String configId);
|
||||
}
|
@@ -110,14 +110,6 @@
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/cn.hutool/hutool-all -->
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>5.3.8</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.directory.studio</groupId>
|
||||
<artifactId>org.apache.commons.codec</artifactId>
|
||||
@@ -125,9 +117,16 @@
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-extra</artifactId>
|
||||
<version>5.8.27</version>
|
||||
<groupId>com.xkcoding</groupId>
|
||||
<artifactId>justauth-spring-boot-starter</artifactId>
|
||||
<version>1.1.0</version>
|
||||
<scope>compile</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>hutool-http</artifactId>
|
||||
<groupId>cn.hutool</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
@@ -0,0 +1,82 @@
|
||||
package com.schisandra.auth.common.enums;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
@Getter
|
||||
public enum SmsSupplierType {
|
||||
/**
|
||||
* 阿里云
|
||||
*/
|
||||
ALIBABA("alibaba"),
|
||||
/**
|
||||
* 华为云
|
||||
*/
|
||||
HUAWEI("huawei"),
|
||||
/**
|
||||
* 云片
|
||||
*/
|
||||
YUNPIAN("yunpian"),
|
||||
/**
|
||||
* 腾讯云
|
||||
*/
|
||||
TENCENT("tenxun"),
|
||||
/**
|
||||
* 合一短信
|
||||
*/
|
||||
UNI_SMS("uni"),
|
||||
/**
|
||||
* 京东云
|
||||
*/
|
||||
JD_CLOUD("jd"),
|
||||
/**
|
||||
* 容联云
|
||||
*/
|
||||
CLOOPEN("cloopen"),
|
||||
/**
|
||||
* 亿美软通
|
||||
*/
|
||||
EMAY("emay"),
|
||||
/**
|
||||
* 天翼云
|
||||
*/
|
||||
CTYUN("ctyun"),
|
||||
/**
|
||||
* 网易云
|
||||
*/
|
||||
WANGYIYUN("wangyiyun"),
|
||||
/**
|
||||
* 七牛云
|
||||
*/
|
||||
QINIU("qiniu"),
|
||||
/**
|
||||
* 助通
|
||||
*/
|
||||
ZHUTONG("zhutong"),
|
||||
|
||||
/**
|
||||
* 联麓
|
||||
*/
|
||||
LIANLU("lianlu"),
|
||||
|
||||
/**
|
||||
* 鼎众
|
||||
*/
|
||||
DINGZHONG("dingzhong"),
|
||||
;
|
||||
public String key;
|
||||
|
||||
SmsSupplierType(String key) {
|
||||
this.key = key;
|
||||
|
||||
}
|
||||
|
||||
public static SmsSupplierType getByKey(String key) {
|
||||
for (SmsSupplierType resultKeyEnum : SmsSupplierType.values()) {
|
||||
if (resultKeyEnum.key.equals(key)) {
|
||||
return resultKeyEnum;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@@ -18,5 +18,7 @@ public interface SchisandraSmsConfigDomainService {
|
||||
|
||||
List<SchisandraSmsConfigBO> queryAll();
|
||||
|
||||
SchisandraSmsConfigBO queryByConfigId(String configId);
|
||||
|
||||
}
|
||||
|
||||
|
@@ -23,4 +23,12 @@ public class SchisandraSmsConfigDomainServiceImpl implements SchisandraSmsConfig
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public SchisandraSmsConfigBO queryByConfigId(String configId) {
|
||||
SchisandraSmsConfig schisandraSmsConfig= schisandraSmsConfigService.queryByConfigId(configId);
|
||||
|
||||
SchisandraSmsConfigBO schisandraSmsConfigBO = SchisandraSmsConfigBOConvert.INSTANCE.convertEntityToBO(schisandraSmsConfig);
|
||||
return schisandraSmsConfigBO;
|
||||
}
|
||||
|
||||
}
|
||||
|
@@ -81,5 +81,7 @@ public interface SchisandraSmsConfigDao {
|
||||
int deleteById(Integer id);
|
||||
|
||||
List<SchisandraSmsConfig> queryAll();
|
||||
|
||||
SchisandraSmsConfig queryByConfigId(String configId);
|
||||
}
|
||||
|
||||
|
@@ -56,4 +56,6 @@ public interface SchisandraSmsConfigService {
|
||||
boolean deleteById(Integer id);
|
||||
|
||||
List<SchisandraSmsConfig> queryAll();
|
||||
|
||||
SchisandraSmsConfig queryByConfigId(String configId);
|
||||
}
|
||||
|
@@ -85,4 +85,9 @@ public class SchisandraSmsConfigServiceImpl implements SchisandraSmsConfigServic
|
||||
public List<SchisandraSmsConfig> queryAll() {
|
||||
return schisandraSmsConfigDao.queryAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SchisandraSmsConfig queryByConfigId(String configId) {
|
||||
return schisandraSmsConfigDao.queryByConfigId(configId);
|
||||
}
|
||||
}
|
||||
|
@@ -335,6 +335,12 @@
|
||||
from schisandra_sms_config
|
||||
where is_deleted = 0
|
||||
</select>
|
||||
<select id="queryByConfigId" resultMap="SchisandraSmsConfigMap">
|
||||
select *
|
||||
from schisandra_sms_config
|
||||
where config_id = #{configId}
|
||||
and is_deleted = 0
|
||||
</select>
|
||||
|
||||
<!--新增所有列-->
|
||||
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
|
||||
|
Reference in New Issue
Block a user