From 1dd5d8f8a616f5cf3caa7828d46989c7d3dcafc4 Mon Sep 17 00:00:00 2001
From: xieb <vip_xiaobin810@163.com>
Date: Thu, 19 Oct 2023 15:01:43 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jtdev' into jtdev
---
skjcmanager/skjcmanager-auth/src/main/java/cn/gistack/auth/config/MyAuthenticationProvider.java | 54 ++++++++++++++++++++++++++++++++++--------------------
1 files changed, 34 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
index ac0ac7e..0697282 100644
--- 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
@@ -1,5 +1,6 @@
package cn.gistack.auth.config;
+import cn.gistack.auth.granter.PhoneTokenGranter;
import cn.gistack.auth.utils.TokenUtil;
import cn.gistack.common.cache.CacheNames;
import com.alibaba.nacos.common.utils.StringUtils;
@@ -33,6 +34,13 @@
* 免密常量
*/
public static final String CUSTOM_LOGIN_SMS = "CUSTOM_LOGIN_SMS";
+ public static final String CUSTOM_LOGIN_WX = "CUSTOM_LOGIN_WX";
+
+ public static final String CUSTOM_LOGIN_OAUTH = "CUSTOM_LOGIN_OAUTH";
+
+ public static final String OAUTH = "oauth";
+ public static final String PHONE = "phone";
+ public static final String WX = "wx";
@Autowired
private BladeRedis bladeRedis;
@@ -60,29 +68,35 @@
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 UserDeniedAuthorizationException(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"));
- }
+
+ 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;
+
+ // 手机号短信登录时不验证密码、微信登录时不验证密码、单点登录时不验证密码
+ if (grantType.equals(PHONE) || grantType.equals(WX) || grantType.equals(OAUTH)) {
// 成功则清除登录错误次数
delFailCount(tenantId, userDetails.getUsername());
+ return;
}
+
+ 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 UserDeniedAuthorizationException(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());
}
}
--
Gitblit v1.9.3