From 90389c7d1ff29b39cc8224fbc070b675d918e0f6 Mon Sep 17 00:00:00 2001
From: zhongrj <646384940@qq.com>
Date: Mon, 24 Apr 2023 21:07:31 +0800
Subject: [PATCH] 手机验证码登录实现,登录认证相关逻辑调整
---
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java | 1
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java | 2
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/BladeTokenGranter.java | 2
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/support/BladePasswordEncoder.java | 2
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/config/MyAuthenticationProvider.java | 120 ++++++++++++++++++++++++
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/utils/TokenUtil.java | 2
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/config/SecurityConfiguration.java | 16 +++
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/PhoneTokenGranter.java | 72 ++++++++++++++
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java | 15 +-
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/service/BladeUserDetailsServiceImpl.java | 9 -
skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/cache/CacheNames.java | 5 +
skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java | 9 +
12 files changed, 235 insertions(+), 20 deletions(-)
diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/config/MyAuthenticationProvider.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/config/MyAuthenticationProvider.java
new file mode 100644
index 0000000..ff0a454
--- /dev/null
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/config/MyAuthenticationProvider.java
@@ -0,0 +1,120 @@
+package cn.gistack.auth.config;
+
+import cn.gistack.auth.utils.TokenUtil;
+import cn.gistack.common.cache.CacheNames;
+import com.alibaba.nacos.common.utils.StringUtils;
+import lombok.SneakyThrows;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.tool.utils.DigestUtil;
+import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.WebUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.authentication.BadCredentialsException;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
+import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Component;
+import javax.servlet.http.HttpServletRequest;
+import java.time.Duration;
+
+/**
+ * 自定义安全认证
+ * @author zhongrj
+ * @time 2022-9-2
+ */
+@Component
+public class MyAuthenticationProvider extends DaoAuthenticationProvider {
+
+ /**
+ * 免密常量
+ */
+ public static final String CUSTOM_LOGIN_SMS = "CUSTOM_LOGIN_SMS";
+
+ @Autowired
+ private BladeRedis bladeRedis;
+
+ /**
+ * 设置 userDetailsService
+ * @param userDetailsService
+ */
+ public MyAuthenticationProvider(UserDetailsService userDetailsService) {
+ super();
+ setUserDetailsService(userDetailsService);
+ }
+
+ /**
+ * 自定义处理密码校验逻辑
+ * @param userDetails 用户信息
+ * @param authentication 认证对象信息
+ * @throws AuthenticationException 认证异常对象信息
+ */
+ @SneakyThrows
+ @Override
+ protected void additionalAuthenticationChecks(UserDetails userDetails, UsernamePasswordAuthenticationToken authentication) throws AuthenticationException {
+ if (authentication.getCredentials() == null) {
+ this.logger.debug("Authentication failed: no credentials provided");
+ throw new BadCredentialsException(this.messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
+ } else {
+ String password = authentication.getCredentials().toString();
+ // 手机号登录时不验证密码
+ if(!CUSTOM_LOGIN_SMS.equals(password)){
+ HttpServletRequest request = WebUtil.getRequest();
+ String grantType = request.getParameter(TokenUtil.GRANT_TYPE_KEY);
+ // 获取租户ID
+ String headerTenant = request.getHeader(TokenUtil.TENANT_HEADER_KEY);
+ String paramTenant = request.getParameter(TokenUtil.TENANT_PARAM_KEY);
+ // 指定租户ID
+ String tenantId = StringUtils.isBlank(headerTenant) ? paramTenant : headerTenant;
+ String detailsPassword = userDetails.getPassword().substring(7);
+ if (!detailsPassword.equals(DigestUtil.hex(password))) {
+
+ int count = getFailCount(tenantId, userDetails.getUsername());
+ // 用户存在但密码错误,超过次数则锁定账号
+ if (grantType != null && !grantType.equals(TokenUtil.REFRESH_TOKEN_KEY)) {
+ setFailCount(tenantId, userDetails.getUsername(), count);
+ throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+ }
+ this.logger.debug("Failed to authenticate since password does not match stored value");
+ throw new BadCredentialsException(this.messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
+ }
+ // 成功则清除登录错误次数
+ delFailCount(tenantId, userDetails.getUsername());
+ }
+ }
+ }
+
+ /**
+ * 获取账号错误次数
+ *
+ * @param tenantId 租户id
+ * @param username 账号
+ * @return int
+ */
+ private int getFailCount(String tenantId, String username) {
+ return Func.toInt(bladeRedis.get(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username)), 0);
+ }
+
+ /**
+ * 设置账号错误次数
+ *
+ * @param tenantId 租户id
+ * @param username 账号
+ * @param count 次数
+ */
+ private void setFailCount(String tenantId, String username, int count) {
+ bladeRedis.setEx(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username), count + 1, Duration.ofMinutes(30));
+ }
+
+ /**
+ * 清空账号错误次数
+ *
+ * @param tenantId 租户id
+ * @param username 账号
+ */
+ private void delFailCount(String tenantId, String username) {
+ bladeRedis.del(CacheNames.tenantKey(tenantId, CacheNames.USER_FAIL_KEY, username));
+ }
+}
diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/config/SecurityConfiguration.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/config/SecurityConfiguration.java
index 6f927d0..a154963 100644
--- a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/config/SecurityConfiguration.java
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/config/SecurityConfiguration.java
@@ -19,9 +19,11 @@
import cn.gistack.auth.support.BladePasswordEncoderFactories;
import lombok.AllArgsConstructor;
import lombok.SneakyThrows;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
+import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@@ -36,6 +38,20 @@
@AllArgsConstructor
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
+ @Autowired
+ private MyAuthenticationProvider myAuthenticationProvider;
+
+ /**
+ * 认证设置
+ * @param auth 认证manager
+ * @throws Exception 异常
+ */
+ @Override
+ protected void configure(AuthenticationManagerBuilder auth) throws Exception {
+ //设置自定义认证provider
+ auth.authenticationProvider(myAuthenticationProvider);
+ }
+
@Bean
@Override
@SneakyThrows
diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/BladeTokenGranter.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/BladeTokenGranter.java
index 0441d5e..7b9cb77 100644
--- a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/BladeTokenGranter.java
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/BladeTokenGranter.java
@@ -43,6 +43,8 @@
List<TokenGranter> granters = new ArrayList<>(Collections.singletonList(endpoints.getTokenGranter()));
// 增加验证码模式
granters.add(new CaptchaTokenGranter(authenticationManager, endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), bladeRedis));
+ // 增加手机验证码模式
+ granters.add(new PhoneTokenGranter(authenticationManager, endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), bladeRedis));
// 增加第三方登陆模式
granters.add(new SocialTokenGranter(endpoints.getTokenServices(), endpoints.getClientDetailsService(), endpoints.getOAuth2RequestFactory(), userClient, socialProperties));
// 组合tokenGranter集合
diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/PhoneTokenGranter.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/PhoneTokenGranter.java
new file mode 100644
index 0000000..81641fe
--- /dev/null
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/granter/PhoneTokenGranter.java
@@ -0,0 +1,72 @@
+package cn.gistack.auth.granter;
+
+import cn.gistack.auth.utils.TokenUtil;
+import cn.gistack.common.cache.CacheNames;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springframework.security.authentication.*;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
+import org.springframework.security.oauth2.common.exceptions.UserDeniedAuthorizationException;
+import org.springframework.security.oauth2.provider.*;
+import org.springframework.security.oauth2.provider.token.AbstractTokenGranter;
+import org.springframework.security.oauth2.provider.token.AuthorizationServerTokenServices;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 验证码TokenGranter
+ *
+ * @author Chill
+ */
+public class PhoneTokenGranter extends AbstractTokenGranter {
+
+ private static final String GRANT_TYPE = "phone";
+
+ private final AuthenticationManager authenticationManager;
+
+ private BladeRedis bladeRedis;
+
+ public PhoneTokenGranter(AuthenticationManager authenticationManager,
+ AuthorizationServerTokenServices tokenServices, ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, BladeRedis bladeRedis) {
+ this(authenticationManager, tokenServices, clientDetailsService, requestFactory, GRANT_TYPE);
+ this.bladeRedis = bladeRedis;
+ }
+
+ protected PhoneTokenGranter(AuthenticationManager authenticationManager, AuthorizationServerTokenServices tokenServices,
+ ClientDetailsService clientDetailsService, OAuth2RequestFactory requestFactory, String grantType) {
+ super(tokenServices, clientDetailsService, requestFactory, grantType);
+ this.authenticationManager = authenticationManager;
+ }
+
+ @Override
+ protected OAuth2Authentication getOAuth2Authentication(ClientDetails client, TokenRequest tokenRequest) {
+ Map<String, String> parameters = new LinkedHashMap<String, String>(tokenRequest.getRequestParameters());
+ String phone = parameters.get("username");
+ String code = parameters.get("password");
+ // 获取验证码
+ String redisCode = bladeRedis.get(CacheNames.PHONE_KEY + phone);
+ // 判断验证码
+ if (code == null || !StringUtil.equalsIgnoreCase(redisCode, code)) {
+ throw new UserDeniedAuthorizationException(TokenUtil.CAPTCHA_NOT_CORRECT);
+ }
+ // 通过手机号查询用户
+ Authentication userAuth = new UsernamePasswordAuthenticationToken(phone, "CUSTOM_LOGIN_SMS");
+ ((AbstractAuthenticationToken) userAuth).setDetails(parameters);
+ try {
+ userAuth = authenticationManager.authenticate(userAuth);
+ }
+ catch (AccountStatusException | BadCredentialsException ase) {
+ //covers expired, locked, disabled cases (mentioned in section 5.2, draft 31)
+ throw new InvalidGrantException(ase.getMessage());
+ }
+ // If the username/password are wrong the spec says we should send 400/invalid grant
+
+ if (userAuth == null || !userAuth.isAuthenticated()) {
+ throw new InvalidGrantException("Could not authenticate user: " + phone);
+ }
+
+ OAuth2Request storedOAuth2Request = getRequestFactory().createOAuth2Request(client, tokenRequest);
+ return new OAuth2Authentication(storedOAuth2Request, userAuth);
+ }
+}
diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/service/BladeUserDetailsServiceImpl.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/service/BladeUserDetailsServiceImpl.java
index eac289b..ff7ab16 100644
--- a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/service/BladeUserDetailsServiceImpl.java
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/service/BladeUserDetailsServiceImpl.java
@@ -20,7 +20,6 @@
import cn.gistack.sm.sjztmd.entity.AttResManagePerson;
import cn.gistack.sm.sjztmd.feign.IAttResManagePersonClient;
import cn.gistack.system.entity.Dept;
-import cn.gistack.system.entity.Role;
import com.alibaba.nacos.common.utils.StringUtils;
import io.jsonwebtoken.Claims;
import lombok.AllArgsConstructor;
@@ -78,7 +77,6 @@
// 获取租户ID
String headerTenant = request.getHeader(TokenUtil.TENANT_HEADER_KEY);
String paramTenant = request.getParameter(TokenUtil.TENANT_PARAM_KEY);
- String password = request.getParameter(TokenUtil.PASSWORD_KEY);
String grantType = request.getParameter(TokenUtil.GRANT_TYPE_KEY);
// 判断租户请求头
if (StringUtil.isAllBlank(headerTenant, paramTenant)) {
@@ -131,11 +129,6 @@
setFailCount(tenantId, username, count);
throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
}
- // 用户存在但密码错误,超过次数则锁定账号
- if (grantType != null && !grantType.equals(TokenUtil.REFRESH_TOKEN_KEY) && !user.getPassword().equals(DigestUtil.hex(password))) {
- setFailCount(tenantId, username, count);
- throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
- }
// 用户角色不存在
if (Func.isEmpty(userInfo.getRoles())) {
throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_NO_ROLE);
@@ -170,8 +163,6 @@
else
userInfo.getDetail().set("adCodeBase",attResManagePersonClient.getAdBaseById(deptRes.getData().getAdCode()).getData());
- // 成功则清除登录错误次数
- delFailCount(tenantId, username);
return new BladeUserDetails(user.getId(),
user.getTenantId(), StringPool.EMPTY, user.getName(), user.getRealName(), user.getDeptId(), user.getPostId(), user.getRoleId(), Func.join(userInfo.getRoles()), Func.toStr(user.getAvatar(), TokenUtil.DEFAULT_AVATAR),
username, AuthConstant.ENCRYPT + user.getPassword(), userInfo.getDetail(), true, true, true, true,
diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/support/BladePasswordEncoder.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/support/BladePasswordEncoder.java
index fe61f54..67f3419 100644
--- a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/support/BladePasswordEncoder.java
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/support/BladePasswordEncoder.java
@@ -18,12 +18,14 @@
import org.springblade.core.tool.utils.DigestUtil;
import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Component;
/**
* 自定义密码加密
*
* @author Chill
*/
+@Component
public class BladePasswordEncoder implements PasswordEncoder {
@Override
diff --git a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/utils/TokenUtil.java b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/utils/TokenUtil.java
index 8e93a65..5c7033f 100644
--- a/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/utils/TokenUtil.java
+++ b/skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/utils/TokenUtil.java
@@ -58,6 +58,8 @@
public final static String DEPT_HEADER_KEY = "Dept-Id";
public final static String ROLE_HEADER_KEY = "Role-Id";
+ public final static String PHONE_HEADER_KEY = "Phone-Key";
+ public final static String PHONE_HEADER_CODE = "Phone-Code";
public final static String CAPTCHA_HEADER_KEY = "Captcha-Key";
public final static String CAPTCHA_HEADER_CODE = "Captcha-Code";
public final static String CAPTCHA_NOT_CORRECT = "验证码不正确";
diff --git a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/cache/CacheNames.java b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/cache/CacheNames.java
index 37116c5..2288a62 100644
--- a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/cache/CacheNames.java
+++ b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/cache/CacheNames.java
@@ -52,6 +52,11 @@
String CAPTCHA_KEY = "blade:auth::blade:captcha:";
/**
+ * 手机验证码key
+ */
+ String PHONE_KEY = "blade:auth::blade:phone:";
+
+ /**
* 登录失败key
*/
String USER_FAIL_KEY = "blade:user::blade:fail:";
diff --git a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java
index 2fb67ba..2e2e2b7 100644
--- a/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java
+++ b/skjcmanager/skjcmanager-common/src/main/java/cn/gistack/common/constant/LauncherConstant.java
@@ -40,7 +40,7 @@
/**
* nacos dev 地址
*/
- String NACOS_DEV_ADDR = "127.0.0.1:8848";
+ String NACOS_DEV_ADDR = "127.0.0.1:8849";
/**
* nacos prod 地址
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
index 80f08be..ca20136 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/intelligentCall/service/impl/CallServiceImpl.java
@@ -62,6 +62,7 @@
String taskName = now.format(DateTimeFormatter.ofPattern("yyyy年MM月dd日HH:mm")) + "智能外呼";
String[] numbers = StringUtils.split(callingNumbers,",");
String taskScheduleTime = LocalDateTime.now().plusHours(1).format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
+ System.out.println("taskScheduleTime = " + taskScheduleTime);
JSONArray arr = getCalleeInfo(params);
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.add("Content-Type", CONTENT_TYPE);
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
index 0660f43..5fc83a9 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/controller/SmsController.java
@@ -11,6 +11,8 @@
import org.springblade.core.tool.api.R;
import org.springframework.web.bind.annotation.*;
+import static cn.gistack.common.cache.CacheNames.PHONE_KEY;
+
/**
* 短信发送控制层
* @author zhongrj
@@ -26,6 +28,11 @@
private final BladeRedis bladeRedis;
+
+ @GetMapping("/test")
+ public void setRedis(){
+ saveCodeForRedis("super_admin","123456");
+ }
/**
* 发送登录验证码
@@ -57,7 +64,7 @@
* @param randNumber
*/
private void saveCodeForRedis(String userNumber, String randNumber) {
- bladeRedis.setEx(userNumber,randNumber,5*60L);
+ bladeRedis.setEx(PHONE_KEY + userNumber,randNumber,5*60L);
}
/**
diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java
index 6b0d1d1..2e9de6d 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/sms/util/SmsUtils.java
@@ -21,6 +21,8 @@
import cn.gistack.sm.sms.constant.SmsConstant;
import com.alibaba.fastjson.JSON;
import org.aspectj.lang.annotation.Before;
+import org.springblade.core.redis.cache.BladeRedis;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@@ -29,10 +31,14 @@
import java.util.List;
import java.util.Random;
+import static cn.gistack.common.cache.CacheNames.PHONE_KEY;
import static cn.gistack.sm.sms.constant.SmsConstant.*;
@Component
public class SmsUtils {
+
+ @Autowired
+ private BladeRedis bladeRedis;
/**
* 固定内容发送
@@ -49,15 +55,6 @@
// 返回
return JSON.toJSONString(request);
}
-
-// public static void main(String[] args) {
-// SMSSendRequest sendRequest = new SMSSendRequest();
-// sendRequest.setMessageContent("你有一项编号为12349的事务需要处理;");
-// sendRequest.setTemplateId("2431012234034");
-// sendRequest.setUserNumber("15170720695");
-// String s = sendMsg(sendRequest);
-// System.out.println("s = " + s);
-// }
/**
* 获取随机字符串
--
Gitblit v1.9.3