From a5453cb3440e4536b5d5dc5e74e48df482836065 Mon Sep 17 00:00:00 2001
From: ludc
Date: 星期五, 08 十二月 2023 12:08:33 +0800
Subject: [PATCH] 码段新增和修改时限制层级类型为最小层级时,层级的值不可输入,并且校验只能输入数字
---
Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java | 30 ++++++++++++++++++++++--------
1 files changed, 22 insertions(+), 8 deletions(-)
diff --git a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java
index 8962a59..eb886d5 100644
--- a/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java
+++ b/Source/UBCS/ubcs-auth/src/main/java/com/vci/ubcs/auth/service/BladeUserDetailsServiceImpl.java
@@ -18,6 +18,7 @@
import com.alibaba.nacos.common.utils.StringUtils;
import com.vci.ubcs.auth.constant.AuthConstant;
+import com.vci.ubcs.auth.support.BladePasswordEncoderFactories;
import com.vci.ubcs.auth.utils.TokenUtil;
import com.vci.ubcs.system.user.entity.User;
import com.vci.ubcs.system.user.entity.UserInfo;
@@ -30,6 +31,8 @@
import com.vci.ubcs.common.cache.CacheNames;
import org.springblade.core.jwt.JwtUtil;
import org.springblade.core.jwt.props.JwtProperties;
+import org.springblade.core.launch.constant.TokenConstant;
+import org.springblade.core.log.annotation.LoginOrLogoutLog;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.secure.utils.AuthUtil;
import org.springblade.core.tool.api.R;
@@ -40,11 +43,13 @@
import com.vci.ubcs.system.entity.Tenant;
import com.vci.ubcs.system.feign.ISysClient;
import org.springframework.beans.factory.annotation.Value;
+import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.security.oauth2.common.exceptions.InvalidGrantException;
import org.springframework.security.oauth2.common.exceptions.UserDeniedAuthorizationException;
import org.springframework.stereotype.Service;
@@ -97,6 +102,7 @@
@Override
@SneakyThrows
+ @LoginOrLogoutLog("login")
public BladeUserDetails loadUserByUsername(String username) {
HttpServletRequest request = WebUtil.getRequest();
// 鑾峰彇鐢ㄦ埛缁戝畾ID
@@ -105,6 +111,7 @@
// 鑾峰彇绉熸埛ID
String headerTenant = request.getHeader(TokenUtil.TENANT_HEADER_KEY);
String paramTenant = request.getParameter(TokenUtil.TENANT_PARAM_KEY);
+ String refreshToken = request.getParameter(TokenConstant.REFRESH_TOKEN);
String password = request.getParameter(TokenUtil.PASSWORD_KEY);
String grantType = request.getParameter(TokenUtil.GRANT_TYPE_KEY);
// 鍒ゆ柇绉熸埛璇锋眰澶�
@@ -132,17 +139,20 @@
throw new UserDeniedAuthorizationException(TokenUtil.USER_HAS_TOO_MANY_FAILS);
}
- //瓒呯骇绠$悊鍛橀厤缃枃浠堕厤缃处鍙峰瘑鐮侊紝瀹炵幇鐧诲綍, 榛樿绉熸埛id涓�000000
- if(tenantId.equals(this.tenantId)){
- if (!this.userName.equals(username) && !password.equalsIgnoreCase(this.password)) {
+ //瓒呯骇绠$悊鍛橀厤缃枃浠堕厤缃处鍙峰瘑鐮侊紝瀹炵幇鐧诲綍, 榛樿绉熸埛id鍜岃秴绠′负閰嶇疆鍑烘潵鐨�
+ if(tenantId.equals(this.tenantId) && userName.equals(username)){
+ if (Func.isBlank(refreshToken)/*鍒锋柊token涓嶇敤鏍¢獙瀵嗙爜*/
+ && (!this.userName.equals(username) || !BladePasswordEncoderFactories.createDelegatingPasswordEncoder().encode(password).equalsIgnoreCase(AuthConstant.ENCRYPT+this.password))
+ ) {
setFailCount(tenantId, username, count,strategy.getLockingTime());
- throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+ throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND+"杩樻湁銆�"+(failCount-count)+"銆戞灏濊瘯鏈轰細!");
}
//濡傛灉ip姣斿鍚巊et鎶涘嚭寮傚父No value present灏辩洿鎺ユ姏寮傚父缁撴潫鐧诲綍
if(ipEnable){
- Log.debug("褰撳墠璁块棶IP锛�"+getIpAddress(request));
+ // Log.debug("褰撳墠璁块棶IP锛�"+getIpAddress(request));
+ Log.debug("褰撳墠璁块棶IP锛�"+WebUtil.getIP(request));
try {
- ips.stream().filter(s -> s.equals(getIpAddress(request))).findFirst().get();
+ ips.stream().filter(s -> s.equals(WebUtil.getIP(request))).findFirst().get();
} catch (Exception e){
throw new UserDeniedAuthorizationException(TokenUtil.IP_NOT_FOND);
}
@@ -191,13 +201,17 @@
// 鐢ㄦ埛涓嶅瓨鍦�,浣嗘彁绀虹敤鎴峰悕涓庡瘑鐮侀敊璇苟閿佸畾璐﹀彿
if (user == null || user.getId() == null) {
setFailCount(tenantId, username, count,strategy.getLockingTime());
- throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+ throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND+"杩樻湁銆�"+(failCount-count)+"銆戞灏濊瘯鏈轰細!");
+ }
+ // 鐢ㄦ埛鐘舵�佷负1鏃惰鏄庤鐢ㄦ埛琚攣瀹�
+ if(user.getUserStatus() == 1){
+ throw new InvalidGrantException(TokenUtil.USER_LOCK);
}
String hex = DigestUtil.hex(password);
// 鐢ㄦ埛瀛樺湪浣嗗瘑鐮侀敊璇�,瓒呰繃娆℃暟鍒欓攣瀹氳处鍙�
if (grantType != null && !grantType.equals(TokenUtil.REFRESH_TOKEN_KEY) && !user.getPassword().equals(hex)) {
setFailCount(tenantId, username, count,strategy.getLockingTime());
- throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND);
+ throw new UsernameNotFoundException(TokenUtil.USER_NOT_FOUND+"杩樻湁銆�"+(failCount-count)+"銆戞灏濊瘯鏈轰細!");
}
// 鐢ㄦ埛瑙掕壊涓嶅瓨鍦�
if (Func.isEmpty(userInfo.getRoles())) {
--
Gitblit v1.9.3