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 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 57 insertions(+), 0 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);
+ }
+
}
--
Gitblit v1.9.3