This commit is contained in:
sxu 2025-02-03 11:14:32 +08:00
parent 40f2183d6e
commit 54769b7feb
6 changed files with 34 additions and 14 deletions

View File

@ -7,6 +7,7 @@ import com.bonus.common.core.exception.CaptchaException;
import com.bonus.common.core.exception.ServiceException; import com.bonus.common.core.exception.ServiceException;
import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.utils.VerificationCodeUtils; import com.bonus.common.core.utils.VerificationCodeUtils;
import com.bonus.common.core.utils.sms.SmsConfig;
import com.bonus.common.core.utils.sms.SmsUtils; import com.bonus.common.core.utils.sms.SmsUtils;
import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.redis.service.RedisService; import com.bonus.common.redis.service.RedisService;
@ -41,6 +42,9 @@ public class SysPasswordService {
@Resource @Resource
private RemoteConfigService configService; private RemoteConfigService configService;
@Resource
private SmsConfig smsConfig;
/** /**
* 登录账户密码错误次数缓存键名 * 登录账户密码错误次数缓存键名
* *
@ -107,7 +111,7 @@ public class SysPasswordService {
String code = VerificationCodeUtils.generateVerificationCode(VerificationCodeUtils.CodeType.NUMERIC); String code = VerificationCodeUtils.generateVerificationCode(VerificationCodeUtils.CodeType.NUMERIC);
String str = "您的验证码为" + code + "尊敬的客户以上验证码3分钟有效微服务平台提醒您转发可能导致账号被盗请勿将验证码泄露于他人"; String str = "您的验证码为" + code + "尊敬的客户以上验证码3分钟有效微服务平台提醒您转发可能导致账号被盗请勿将验证码泄露于他人";
String verifyKey = CacheConstants.VERIFICATION_CODE + phone; String verifyKey = CacheConstants.VERIFICATION_CODE + phone;
String s = SmsUtils.smsToken(phone, str, ""); String s = SmsUtils.smsToken(smsConfig, phone, str, "");
if (StringUtils.isNotEmpty(s)) { if (StringUtils.isNotEmpty(s)) {
if (s.contains("ok")) { if (s.contains("ok")) {
redisService.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); redisService.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);

View File

@ -1,16 +1,23 @@
package com.bonus.common.core.utils.sms; package com.bonus.common.core.utils.sms;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "sms-config")
@Data
public class SmsConfig { public class SmsConfig {
public static final String DOMAIN = "http://api.ktsms.cn/"; private String domain;
public static final String DDT_KEY = "bonusyn"; private String ddtKey;
public static final String SECRET_KEY = "IU0ypHbH"; private String securityKey;
public static final String SMS_SIGNATURE = "【博诺思】"; private String signature;
public static final String SMS_TOKEN = "sms_token"; private String smsToken;
} }

View File

@ -3,6 +3,7 @@ package com.bonus.common.core.utils.sms;
import com.alibaba.fastjson2.JSON; import com.alibaba.fastjson2.JSON;
import com.bonus.common.core.utils.http.HttpRequestHelper; import com.bonus.common.core.utils.http.HttpRequestHelper;
import javax.annotation.Resource;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
@ -16,18 +17,18 @@ public class SmsUtils {
* @param sendTime 为空表示立即发送定时发送格式20101024090810 * @param sendTime 为空表示立即发送定时发送格式20101024090810
* @return 是否发送成功 * @return 是否发送成功
*/ */
public static String smsToken(String mobile, String content, String sendTime) { public static String smsToken(SmsConfig smsConfig, String mobile, String content, String sendTime) {
Map<String, String> headers = new HashMap<>(); Map<String, String> headers = new HashMap<>();
Map<String, Object> mapJson = new HashMap<>(6); Map<String, Object> mapJson = new HashMap<>(6);
mapJson.put("ddtkey", SmsConfig.DDT_KEY); mapJson.put("ddtkey", smsConfig.getDdtKey());
mapJson.put("secretkey", SmsConfig.SECRET_KEY); mapJson.put("secretkey", smsConfig.getSecurityKey());
mapJson.put("mobile", mobile); mapJson.put("mobile", mobile);
mapJson.put("content", SmsConfig.SMS_SIGNATURE + content); mapJson.put("content", smsConfig.getSignature() + content);
mapJson.put("sendTime", sendTime); mapJson.put("sendTime", sendTime);
mapJson.put("extno", ""); mapJson.put("extno", "");
// 将mapJson转换为URL查询参数格式 // 将mapJson转换为URL查询参数格式
StringBuilder urlBuilder = new StringBuilder(SmsConfig.SMS_TOKEN + "?"); StringBuilder urlBuilder = new StringBuilder(smsConfig.getSmsToken() + "?");
for (Map.Entry<String, Object> entry : mapJson.entrySet()) { for (Map.Entry<String, Object> entry : mapJson.entrySet()) {
try { try {
String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8"); String encodedKey = URLEncoder.encode(entry.getKey(), "UTF-8");
@ -43,6 +44,6 @@ public class SmsUtils {
String urlWithParams = urlBuilder.toString(); String urlWithParams = urlBuilder.toString();
String json = JSON.toJSONString(mapJson); String json = JSON.toJSONString(mapJson);
return HttpRequestHelper.postJson(SmsConfig.DOMAIN, urlWithParams, json, headers); return HttpRequestHelper.postJson(smsConfig.getDomain(), urlWithParams, json, headers);
} }
} }

View File

@ -4,6 +4,7 @@ import com.bonus.common.core.constant.CacheConstants;
import com.bonus.common.core.exception.CaptchaException; import com.bonus.common.core.exception.CaptchaException;
import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.utils.VerificationCodeUtils; import com.bonus.common.core.utils.VerificationCodeUtils;
import com.bonus.common.core.utils.sms.SmsConfig;
import com.bonus.common.core.utils.sms.SmsUtils; import com.bonus.common.core.utils.sms.SmsUtils;
import com.bonus.common.redis.service.RedisService; import com.bonus.common.redis.service.RedisService;
import com.bonus.common.security.config.VerificationCodeConfig; import com.bonus.common.security.config.VerificationCodeConfig;
@ -22,6 +23,8 @@ public class SmsService {
@Resource @Resource
private VerificationCodeConfig verificationCodeConfig; private VerificationCodeConfig verificationCodeConfig;
@Resource @Resource
private SmsConfig smsConfig;
@Resource
private RedisService redisService; private RedisService redisService;
/** /**
@ -37,7 +40,7 @@ public class SmsService {
String code = VerificationCodeUtils.generateVerificationCode(NUMERIC); String code = VerificationCodeUtils.generateVerificationCode(NUMERIC);
String str = verificationCodeConfig.getContent().replace("<code>", code); String str = verificationCodeConfig.getContent().replace("<code>", code);
str = str.replace("<time>", verificationCodeConfig.getTime().toString()); str = str.replace("<time>", verificationCodeConfig.getTime().toString());
String s = SmsUtils.smsToken(to, str, ""); String s = SmsUtils.smsToken(smsConfig, to, str, "");
if (StringUtils.isNotEmpty(s)) { if (StringUtils.isNotEmpty(s)) {
if (s.contains("ok")) { if (s.contains("ok")) {
String verifyKey = CacheConstants.VERIFICATION_CODE + StringUtils.nvl(to, ""); String verifyKey = CacheConstants.VERIFICATION_CODE + StringUtils.nvl(to, "");

View File

@ -1,6 +1,7 @@
com.bonus.common.security.config.MyFilter com.bonus.common.security.config.MyFilter
com.bonus.common.security.config.WebMvcConfig com.bonus.common.security.config.WebMvcConfig
com.bonus.common.security.config.VerificationCodeConfig com.bonus.common.security.config.VerificationCodeConfig
com.bonus.common.core.utils.sms.SmsConfig
com.bonus.common.security.service.TokenService com.bonus.common.security.service.TokenService
com.bonus.common.security.service.SmsService com.bonus.common.security.service.SmsService
com.bonus.common.security.service.EmailService com.bonus.common.security.service.EmailService

View File

@ -8,6 +8,7 @@ import com.bonus.common.core.utils.SpringUtils;
import com.bonus.common.core.utils.StringUtils; import com.bonus.common.core.utils.StringUtils;
import com.bonus.common.core.utils.bean.BeanValidators; import com.bonus.common.core.utils.bean.BeanValidators;
import com.bonus.common.core.utils.encryption.Sm4Utils; import com.bonus.common.core.utils.encryption.Sm4Utils;
import com.bonus.common.core.utils.sms.SmsConfig;
import com.bonus.common.core.utils.sms.SmsUtils; import com.bonus.common.core.utils.sms.SmsUtils;
import com.bonus.common.core.web.domain.AjaxResult; import com.bonus.common.core.web.domain.AjaxResult;
import com.bonus.common.core.web.domain.BaseEntity; import com.bonus.common.core.web.domain.BaseEntity;
@ -77,6 +78,9 @@ public class SysUserServiceImpl implements ISysUserService {
@Resource @Resource
private VerificationCodeConfig verificationCodeConfig; private VerificationCodeConfig verificationCodeConfig;
@Resource
private SmsConfig smsConfig;
@Autowired @Autowired
private JavaMailSender mailSender; // 自动注入JavaMailSender用于发送邮件 private JavaMailSender mailSender; // 自动注入JavaMailSender用于发送邮件
@ -603,7 +607,7 @@ public class SysUserServiceImpl implements ISysUserService {
Integer i = userMapper.approvalStatus(userId); Integer i = userMapper.approvalStatus(userId);
if (i > 0) { if (i > 0) {
if (StringUtils.isNotEmpty(sysUser.getPhonenumber())) { if (StringUtils.isNotEmpty(sysUser.getPhonenumber())) {
SmsUtils.smsToken(sysUser.getPhonenumber(), "您的账号:" + sysUser.getUserName() + "已通过审批,请登录系统", ""); SmsUtils.smsToken(smsConfig, sysUser.getPhonenumber(), "您的账号:" + sysUser.getUserName() + "已通过审批,请登录系统", "");
} }
if (StringUtils.isNotEmpty(sysUser.getEmail())) { if (StringUtils.isNotEmpty(sysUser.getEmail())) {
sendSimpleEmail(sysUser.getEmail(), "您的账号:" + sysUser.getUserName() + "已通过审批,请登录系统"); sendSimpleEmail(sysUser.getEmail(), "您的账号:" + sysUser.getUserName() + "已通过审批,请登录系统");