短信验证码服务代码优化

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); _logger.trace("refresh token {} " , refreshToken);
if(_logger.isTraceEnabled()) {WebContext.printRequest(request);} if(_logger.isTraceEnabled()) {WebContext.printRequest(request);}
try { try {
if(StringUtils.isNotBlank(refreshToken) if(refreshTokenService.validateJwtToken(refreshToken)) {
&& refreshTokenService.validateJwtToken(refreshToken)) {
String sessionId = refreshTokenService.resolveJWTID(refreshToken); String sessionId = refreshTokenService.resolveJWTID(refreshToken);
_logger.trace("Try to refresh sessionId [{}]" , sessionId); _logger.trace("Try to refresh sessionId [{}]" , sessionId);
Session session = sessionManager.refresh(sessionId); Session session = sessionManager.refresh(sessionId);

View File

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

View File

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