From 027c21867ac838a35d9b29b5c138bc59e4cfbca3 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期日, 28 九月 2025 16:31:46 +0800
Subject: [PATCH] yys 修改word模板
---
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java | 195 ++++++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 187 insertions(+), 8 deletions(-)
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
index fe16427..385d707 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -1,7 +1,28 @@
package com.ruoyi.framework.web.service;
import javax.annotation.Resource;
+import javax.net.ssl.SSLContext;
+
+import com.alibaba.fastjson.JSON;
+import com.ruoyi.framework.model.SsoOauthTokenModel;
+import com.ruoyi.framework.model.SsoUserInfoModel;
+import com.ruoyi.framework.web.ssoAuth.SsoCodeAuthenticationToken;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpStatus;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.http.ssl.TrustStrategy;
+import org.apache.http.util.EntityUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -29,12 +50,24 @@
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.TimeUnit;
+
/**
* 鐧诲綍鏍¢獙鏂规硶
- *
+ *
* @author ruoyi
*/
@Component
+@Slf4j
public class SysLoginService
{
@Autowired
@@ -45,16 +78,19 @@
@Autowired
private RedisCache redisCache;
-
+
@Autowired
- private ISysUserService userService;
+ private ISysUserService sysUserService;
@Autowired
private ISysConfigService configService;
+ @Autowired
+ private RedisTemplate redisTemplate;
+
/**
* 鐧诲綍楠岃瘉
- *
+ *
* @param username 鐢ㄦ埛鍚�
* @param password 瀵嗙爜
* @param code 楠岃瘉鐮�
@@ -63,8 +99,8 @@
*/
public String login(String username, String password, String code, String uuid)
{
- // 楠岃瘉鐮佹牎楠�
- validateCaptcha(username, code, uuid);
+// // 楠岃瘉鐮佹牎楠�
+// validateCaptcha(username, code, uuid);
// 鐧诲綍鍓嶇疆鏍¢獙
loginPreCheck(username, password);
// 鐢ㄦ埛楠岃瘉
@@ -102,7 +138,7 @@
/**
* 鏍¢獙楠岃瘉鐮�
- *
+ *
* @param username 鐢ㄦ埛鍚�
* @param code 楠岃瘉鐮�
* @param uuid 鍞竴鏍囪瘑
@@ -176,6 +212,149 @@
sysUser.setUserId(userId);
sysUser.setLoginIp(IpUtils.getIpAddr());
sysUser.setLoginDate(DateUtils.getNowDate());
- userService.updateUserProfile(sysUser);
+ sysUserService.updateUserProfile(sysUser);
+ }
+
+ /**
+ * 鍗曠偣鐧诲綍
+ * @param code
+ * @return
+ */
+ public String loginBySSO(String code) {
+
+ // 鑾峰彇鍗曠偣鐧诲綍token
+ SsoOauthTokenModel tokenModel = this.getSsoAccessToken(code);
+ if (tokenModel == null) {
+ throw new RuntimeException("鍗曠偣鐧诲綍楠岃瘉澶辫触");
+ }
+
+ // 鑾峰彇鍗曠偣鐧诲綍鐢ㄦ埛淇℃伅
+ SsoUserInfoModel userInfo = this.getSsoUserInfo(tokenModel.getAccess_token());
+ if (userInfo == null) {
+ throw new RuntimeException("鍗曠偣鐧诲綍楠岃瘉澶辫触");
+ }
+
+ // 鏌ヨ鏈湴鐢ㄦ埛淇℃伅
+ LoginUser loginUser = this.getSsoLoginToken(userInfo.getEmployeeId());
+ recordLoginInfo(loginUser.getUserId());
+
+ // 鍒涘缓鐧诲綍淇℃伅
+ AsyncManager.me().execute(AsyncFactory.recordLogininfor(userInfo.getEmployeeId(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.sso.login.success")));
+ redisTemplate.opsForValue().set("ssoOauthToken:idToken:" + userInfo.getEmployeeId(), tokenModel.getId_token(), 3, TimeUnit.DAYS);
+ // 鐢熸垚token
+ return tokenService.createToken(loginUser);
+ }
+
+ /**
+ * ***** 鑾峰彇鏈湴鐢ㄦ埛淇℃伅 *****
+ * @param username
+ * @return
+ */
+ public LoginUser getSsoLoginToken(String username) {
+ // 鐢ㄦ埛楠岃瘉
+ Authentication authentication = null;
+ SysUser sysUser = sysUserService.selectUserByUserName(username);
+ if (sysUser == null) {
+ throw new ServiceException("褰撳墠绯荤粺娌℃湁璇ョ敤鎴�");
+ }
+ try
+ {
+ // 鏃犻渶瀵嗙爜鑾峰彇鐢ㄦ埛淇℃伅
+ authentication = authenticationManager.authenticate(new SsoCodeAuthenticationToken(username));
+ }
+ catch (Exception e)
+ {
+ if (e instanceof BadCredentialsException)
+ {
+ AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.sso.not.match")));
+ throw new UserPasswordNotMatchException();
+ }
+ else
+ {
+ AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+ throw new ServiceException(e.getMessage());
+ }
+ }
+ finally
+ {
+ AuthenticationContextHolder.clearContext();
+ }
+ AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.sso.login.success")));
+ return (LoginUser) authentication.getPrincipal();
+
+ }
+
+
+
+ /**
+ * **** 鑾峰彇鍗曠偣鐧诲綍token ****
+ * @param code
+ * @return
+ */
+ public SsoOauthTokenModel getSsoAccessToken(String code) {
+ return null;
+ }
+
+ /**
+ * ***鑾峰彇鍗曠偣鐧诲綍鐢ㄦ埛淇℃伅***
+ * @param accessToken
+ * @return
+ */
+ public SsoUserInfoModel getSsoUserInfo(String accessToken) {
+ return null;
+ }
+
+ public static String doPost(String url, Map<String, String> headers, List<NameValuePair> params) {
+ CloseableHttpClient client = createSSLClientDefault();
+ CloseableHttpResponse response = null;
+ try {
+ HttpPost method = new HttpPost(url);
+ headers.forEach(method::setHeader);
+ if (params != null) {
+ method.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
+ }
+
+ response = client.execute(method);
+ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+ HttpEntity entity = response.getEntity();
+ return EntityUtils.toString(entity);
+ }
+ } catch (Exception e) {
+ log.error("缁熶竴鐧诲綍璇锋眰鍑虹幇寮傚父", e.getMessage());
+ } finally {
+ try {
+ if (client != null) {
+ client.close();
+ }
+ if (response != null) {
+ response.close();
+ }
+ } catch (Exception e) {
+ log.error("缁熶竴鐧诲綍璇锋眰鍑虹幇寮傚父", e.getMessage());
+ }
+ }
+ return null;
+ }
+
+
+ private static CloseableHttpClient createSSLClientDefault() {
+ try {
+ SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
+ //淇′换鎵�鏈�
+ @Override
+ public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+ return true;
+ }
+ }).build();
+ SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext);
+ return HttpClients.custom().setSSLSocketFactory(sslsf).build();
+ } catch (KeyManagementException e) {
+ e.printStackTrace();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ } catch (KeyStoreException e) {
+ e.printStackTrace();
+ }
+ return HttpClients.createDefault();
}
}
--
Gitblit v1.9.3