From a54447507a3af4347e6b5981eb9da21d5ca03898 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期二, 03 十一月 2026 13:27:14 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_tide_wrzs' into dev_tide_wrzs
---
src/main/java/com/ruoyi/framework/security/service/SysLoginService.java | 57 ++++++++++++++++++++++++++++
src/main/java/com/ruoyi/tide/controller/TideController.java | 10 +++-
2 files changed, 64 insertions(+), 3 deletions(-)
diff --git a/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java b/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
index f379b7f..8b3e83a 100644
--- a/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
+++ b/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java
@@ -10,10 +10,13 @@
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.UserConstants;
+import com.ruoyi.common.enums.UserStatus;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.exception.user.BlackListException;
import com.ruoyi.common.exception.user.CaptchaException;
@@ -45,8 +48,13 @@
@Component
public class SysLoginService
{
+ private static final Logger log = LoggerFactory.getLogger(SysLoginService.class);
+
@Autowired
private TokenService tokenService;
+
+ @Autowired
+ private UserDetailsServiceImpl userDetailsService;
@Resource
private AuthenticationManager authenticationManager;
@@ -281,4 +289,53 @@
return tokenService.createToken(loginUser);
}
+ /**
+ * 娴疆闂ㄦ埛 SSO 鍏嶅瘑鐧诲綍
+ * <p>
+ * 鑳屾櫙锛氭氮娼� OSS 閫氳繃 /tide/tideLogin 鎶� code 鎹㈡垚 token锛屽啀鍙栧埌 tenant 淇℃伅鍚庯紝
+ * 鍘熸湰璋冪敤 login(username, password, code, uuid) 鐢� tenantAccount + tenantPassword
+ * 鍋氭湰鍦扮櫥褰曘�備絾 tenantPassword 鏄氮娼郴缁熻鎯呴噷鍗曠嫭閰嶇疆鐨勫�硷紝涓庢湰鍦� sys_user.password
+ * 涓�鏃︿笉涓�鑷达紙娴疆渚ф敼瀵嗙爜銆佹湰鍦伴噸缃瘑鐮併�佽处鍙风敱 applicationOrdering 鍒涘缓鍚庢敼杩囧瘑鐮佺瓑锛夛紝
+ * 灏变細鎶ャ�岀鎴疯处鍙穂xxx]鍦ㄧ郴缁熶腑鐧诲綍澶辫触(鐢ㄦ埛涓嶅瓨鍦�/瀵嗙爜閿欒)銆嶏紝瀵艰嚧闂ㄦ埛鏁存潯鐧诲綍閾捐矾鏂帀銆�
+ * <p>
+ * 閴存潈瀹為檯涓婂湪娴疆渚у凡缁忓畬鎴愶紙鑳芥嬁鍒版湁鏁� token 鍜� userInfo 灏辫鏄庤韩浠藉彲淇★級锛�
+ * 鏈湴鏃犻渶鍐嶆鏍¢獙瀵嗙爜銆傝繖閲岀洿鎺ユ寜鐢ㄦ埛鍚嶅姞杞界敤鎴峰苟绛惧彂鏈郴缁� token銆�
+ * <p>
+ * 浠嶇劧淇濈暀鐨勬牎楠岋細鐢ㄦ埛涓嶅瓨鍦ㄣ�佸凡鍒犻櫎銆佸凡鍋滅敤 鈥斺�� 杩欎笁绉嶆儏鍐垫嫆缁濈櫥褰曘��
+ *
+ * @param username 娴疆杩斿洖鐨勭鎴疯处鍙凤紙tenantAccount锛�
+ * @return 鏈郴缁� token
+ */
+ public String ssoLogin(String username)
+ {
+ SysUser user = userService.selectUserByUserName(username);
+ if (StringUtils.isNull(user))
+ {
+ log.info("SSO 鐧诲綍锛氱敤鎴� {} 涓嶅瓨鍦�.", username);
+ AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL,
+ MessageUtils.message("user.not.exists")));
+ throw new UserNotExistsException();
+ }
+ if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
+ {
+ log.info("SSO 鐧诲綍锛氱敤鎴� {} 宸茶鍒犻櫎.", username);
+ AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL,
+ MessageUtils.message("user.password.delete")));
+ throw new ServiceException(MessageUtils.message("user.password.delete"));
+ }
+ if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
+ {
+ log.info("SSO 鐧诲綍锛氱敤鎴� {} 宸茶鍋滅敤.", username);
+ AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL,
+ MessageUtils.message("user.blocked")));
+ throw new ServiceException(MessageUtils.message("user.blocked"));
+ }
+ // 鍏嶅瘑锛氱洿鎺ユ瀯閫� LoginUser锛堜笉璋冪敤 passwordService.validate锛�
+ LoginUser loginUser = (LoginUser) userDetailsService.createLoginUser(user);
+ AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS,
+ "娴疆闂ㄦ埛 SSO 鐧诲綍"));
+ recordLoginInfo(user.getUserId());
+ return tokenService.createToken(loginUser);
+ }
+
}
diff --git a/src/main/java/com/ruoyi/tide/controller/TideController.java b/src/main/java/com/ruoyi/tide/controller/TideController.java
index 0128b59..33cac85 100644
--- a/src/main/java/com/ruoyi/tide/controller/TideController.java
+++ b/src/main/java/com/ruoyi/tide/controller/TideController.java
@@ -105,12 +105,16 @@
if (ObjectUtils.isEmpty(password)) {
password = firstText(userInfo, "tenantPassword", "password", "pwd");
}
- if (ObjectUtils.isEmpty(account) || ObjectUtils.isEmpty(password)) {
- log.error("[娴疆SSO] 鏈彇鍒扮鎴疯处鍙�/瀵嗙爜, userInfo={}", userInfo);
+ // 鍏嶅瘑鐧诲綍鍙渶璐﹀彿锛沺assword 浠呬綔鏃ュ織鍙傝�冿紝娴疆渚т笉杩斿洖涔熶笉褰卞搷鐧诲綍
+ if (ObjectUtils.isEmpty(account)) {
+ log.error("[娴疆SSO] 鏈彇鍒扮鎴疯处鍙�, userInfo={}", userInfo);
return AjaxResult.error("娴疆鏈繑鍥炰紒涓氱鎴疯处鍙蜂俊鎭紝璇疯仈绯诲钩鍙扮鐞嗗憳妫�鏌ヨ璐﹀彿鐨勪紒涓氱粦瀹�");
}
try {
- String generateToken = loginService.login(account, password, null, IdWorker.get32UUID());
+ // 娴疆渚у凡瀹屾垚韬唤璁よ瘉锛坈ode 鎹� token 鈫� 鍙� userInfo锛夛紝鏈湴涓嶅啀鐢� tenantPassword 浜屾鏍¢獙銆�
+ // 鍘熷疄鐜� login(account, password, ...) 鍦ㄦ氮娼厤缃殑瀵嗙爜涓庢湰鍦� sys_user.password 涓嶄竴鑷存椂
+ // 浼氭姏 UserPasswordNotMatchException锛岃〃鐜颁负銆岀鎴疯处鍙穂xxx]鍦ㄧ郴缁熶腑鐧诲綍澶辫触(鐢ㄦ埛涓嶅瓨鍦�/瀵嗙爜閿欒)銆嶃��
+ String generateToken = loginService.ssoLogin(account);
AjaxResult ajax = AjaxResult.success();
ajax.put(Constants.TOKEN, generateToken);
return ajax;
--
Gitblit v1.9.3