短信验证码服务代码优化

This commit is contained in:
shimingxy 2024-10-31 10:07:29 +08:00
parent 070db180f6
commit e269efd5de
3 changed files with 42 additions and 64 deletions

View File

@ -65,8 +65,7 @@ public class AuthTokenRefreshPoint {
_logger.trace("refresh token {} " , refreshToken);
if(_logger.isTraceEnabled()) {WebContext.printRequest(request);}
try {
if(StringUtils.isNotBlank(refreshToken)
&& refreshTokenService.validateJwtToken(refreshToken)) {
if(refreshTokenService.validateJwtToken(refreshToken)) {
String sessionId = refreshTokenService.resolveJWTID(refreshToken);
_logger.trace("Try to refresh sessionId [{}]" , sessionId);
Session session = sessionManager.refresh(sessionId);

View File

@ -49,8 +49,7 @@ public class SmsAutoConfiguration {
smsOtpAuthnService.setRedisOptTokenStore(redisOptTokenStore);
}
_logger.debug("SmsOtpAuthnService {} inited." ,
persistence == ConstsPersistence.REDIS ? "Redis" : "InMemory");
_logger.debug("SmsOtpAuthnService {} inited." , persistence == ConstsPersistence.REDIS ? "Redis" : "InMemory");
return smsOtpAuthnService;
}

View File

@ -17,7 +17,6 @@
package org.dromara.maxkey.password.sms;
import java.sql.Types;
import java.util.concurrent.TimeUnit;
import org.dromara.maxkey.configuration.EmailConfig;
@ -33,16 +32,15 @@ import org.dromara.maxkey.password.sms.impl.SmsOtpAuthnTencentCloud;
import org.dromara.maxkey.password.sms.impl.SmsOtpAuthnYunxin;
import org.dromara.maxkey.persistence.service.CnfEmailSendersService;
import org.dromara.maxkey.persistence.service.CnfSmsProviderService;
import org.dromara.mybatis.jpa.query.LambdaQuery;
import com.github.benmanes.caffeine.cache.Cache;
import com.github.benmanes.caffeine.cache.Caffeine;
public class SmsOtpAuthnService {
protected static final Cache<String, AbstractOtpAuthn> smsAuthnStore =
Caffeine.newBuilder()
.expireAfterWrite(60, TimeUnit.MINUTES)
.build();
static final Cache<String, AbstractOtpAuthn> smsAuthnStore =
Caffeine.newBuilder().expireAfterWrite(60, TimeUnit.MINUTES).build();
CnfSmsProviderService smsProviderService;
@ -62,69 +60,51 @@ public class SmsOtpAuthnService {
}
public AbstractOtpAuthn getByInstId(String instId) {
AbstractOtpAuthn otpAuthn = smsAuthnStore.getIfPresent(instId);
if(otpAuthn == null) {
CnfSmsProvider smsProvider =
smsProviderService.findOne("where instid = ? ", new Object[]{instId}, new int[]{Types.VARCHAR});
AbstractOtpAuthn smsOtpAuthn = smsAuthnStore.getIfPresent(instId);
if(smsOtpAuthn == null) {
LambdaQuery<CnfSmsProvider> lambdaQuery = new LambdaQuery<CnfSmsProvider>();
lambdaQuery.eq(CnfSmsProvider::getInstId, instId);
CnfSmsProvider smsProvider = smsProviderService.get(lambdaQuery);
if(smsProvider != null ) {
if(smsProvider.getProvider().equalsIgnoreCase("aliyun")) {
SmsOtpAuthnAliyun aliyun = new SmsOtpAuthnAliyun(
smsOtpAuthn = new SmsOtpAuthnAliyun(
smsProvider.getAppKey(),
PasswordReciprocal.getInstance().decoder(smsProvider.getAppSecret()),
smsProvider.getTemplateId(),
smsProvider.getSignName()
);
if(redisOptTokenStore != null) {
aliyun.setOptTokenStore(redisOptTokenStore);
}
otpAuthn = aliyun;
smsProvider.getSignName());
}else if(smsProvider.getProvider().equalsIgnoreCase("tencentcloud")) {
SmsOtpAuthnTencentCloud tencentCloud = new SmsOtpAuthnTencentCloud(
smsOtpAuthn = new SmsOtpAuthnTencentCloud(
smsProvider.getAppKey(),
PasswordReciprocal.getInstance().decoder(smsProvider.getAppSecret()),
smsProvider.getSmsSdkAppId(),
smsProvider.getTemplateId(),
smsProvider.getSignName()
);
if(redisOptTokenStore != null) {
tencentCloud.setOptTokenStore(redisOptTokenStore);
}
otpAuthn = tencentCloud;
smsProvider.getTemplateId(), smsProvider.getSignName());
}else if(smsProvider.getProvider().equalsIgnoreCase("neteasesms")) {
SmsOtpAuthnYunxin yunxin = new SmsOtpAuthnYunxin(
smsOtpAuthn = new SmsOtpAuthnYunxin(
smsProvider.getAppKey(),
PasswordReciprocal.getInstance().decoder(smsProvider.getAppSecret()),
smsProvider.getTemplateId()
);
if(redisOptTokenStore != null) {
yunxin.setOptTokenStore(redisOptTokenStore);
}
otpAuthn = yunxin;
smsProvider.getTemplateId());
}else if(smsProvider.getProvider().equalsIgnoreCase("email")) {
CnfEmailSenders emailSender =
emailSendersService.findOne("where instid = ? ", new Object[]{instId}, new int[]{Types.VARCHAR});
LambdaQuery<CnfEmailSenders> emailSenderslambdaQuery = new LambdaQuery<CnfEmailSenders>();
emailSenderslambdaQuery.eq(CnfEmailSenders::getInstId, instId);
CnfEmailSenders emailSender = emailSendersService.get(emailSenderslambdaQuery);
String credentials = PasswordReciprocal.getInstance().decoder(emailSender.getCredentials());
EmailConfig emailConfig =
new EmailConfig(
EmailConfig emailConfig = new EmailConfig(
emailSender.getAccount(),
credentials,
emailSender.getSmtpHost(),
emailSender.getPort(),
ConstsBoolean.isTrue(emailSender.getSslSwitch()),
emailSender.getSender());
MailOtpAuthn mailOtpAuthn = new MailOtpAuthn(emailConfig);
if(redisOptTokenStore != null) {
mailOtpAuthn.setOptTokenStore(redisOptTokenStore);
}
otpAuthn = mailOtpAuthn;
smsOtpAuthn = new MailOtpAuthn(emailConfig);
}
smsAuthnStore.put(instId, otpAuthn);
if(redisOptTokenStore != null) {
smsOtpAuthn.setOptTokenStore(redisOptTokenStore);
}
smsAuthnStore.put(instId, smsOtpAuthn);
}
}
return otpAuthn;
return smsOtpAuthn;
}
public void setRedisOptTokenStore(RedisOtpTokenStore redisOptTokenStore) {