From cac8d292911a995ac388160704ca8713ea76cd55 Mon Sep 17 00:00:00 2001 From: liusheng <337615773@qq.com> Date: 星期四, 28 八月 2025 14:33:25 +0800 Subject: [PATCH] 河南数据采集代码提交 --- ruoyi-admin/src/main/java/com/ruoyi/web/controller/sso/SSOController.java | 125 ++++++++++++----------------------------- 1 files changed, 37 insertions(+), 88 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sso/SSOController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sso/SSOController.java index 0df2993..78296c7 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sso/SSOController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/sso/SSOController.java @@ -3,7 +3,9 @@ import com.alibaba.fastjson.JSON; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.common.core.domain.model.LoginUser; +import com.ruoyi.common.utils.HttpUtil; import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.utils.http.HttpUtils; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.service.ISysUserService; import com.smartor.domain.SSOTokenResponse; @@ -25,6 +27,8 @@ import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Map; /** * SSO鍗曠偣鐧诲綍鎺у埗鍣� @@ -91,99 +95,44 @@ * 璁块棶璺緞锛歨ttp://鍩熷悕:8095/sso/login */ @GetMapping("") - public void ssoLogin(HttpServletResponse response, HttpServletRequest request) throws IOException { + public void ssoLogin() { log.info("鏀跺埌SSO鐧诲綍璇锋眰锛屽紑濮嬮噸瀹氬悜鍒版巿鏉冩湇鍔″櫒"); - // 鑾峰彇瀹㈡埛绔疘P - String clientIp = getClientIp(request); - boolean isInternal = isInternalNetwork(clientIp); - - // 鏋勫缓鎺堟潈URL - String authUrl = buildAuthorizationUrl(isInternal); - log.info("閲嶅畾鍚戝埌鎺堟潈URL: {}", authUrl); - - response.sendRedirect(authUrl); - } - - /** - * SSO鍥炶皟澶勭悊 - */ - @GetMapping("/callback") - public void ssoCallback(@RequestParam(required = false) String code, - @RequestParam(required = false) String state, - @RequestParam(required = false) String error, - HttpServletResponse response, - HttpServletRequest request) throws IOException { - - log.info("鏀跺埌SSO鍥炶皟锛宑ode: {}, state: {}, error: {}", code, state, error); - - if (error != null) { - log.error("SSO鎺堟潈澶辫触: {}", error); - try { - response.sendRedirect("/login?sso_error=" + URLEncoder.encode(error, "UTF-8")); - } catch (Exception e) { - log.error("閲嶅畾鍚戝け璐�", e); - response.sendRedirect("/login?sso_error=unknown_error"); - } - return; - } - - if (code == null || !this.state.equals(state)) { - log.error("SSO鍥炶皟鍙傛暟閿欒锛宑ode: {}, state: {}", code, state); - response.sendRedirect("/login?sso_error=invalid_callback"); - return; - } - + // Authorize閴存潈鎺ュ彛 + String param = "client_id=" + clientId + "&redirect_uri=" + internalRedirectUri + "&response_type=code" + "&state=" + state + "&scope=" + scope; + log.info("銆怉uthorize閴存潈鎺ュ彛銆戝叆鍙備负锛歿}", param); + String s = HttpUtils.sendGet(internalAuthorizeUrl, param); + Map<String, String> result = getResult(s); + String code = result.get("code"); try { - // 鑾峰彇瀹㈡埛绔疘P - String clientIp = getClientIp(request); - boolean isInternal = isInternalNetwork(clientIp); + SSOTokenResponse accessToken = getAccessToken(code, true); + SSOUserInfo userInfo = getUserInfo(accessToken.getAccess_token(), true); - // 1. 鐢╟ode鎹㈠彇access_token - SSOTokenResponse tokenResponse = getAccessToken(code, isInternal); - log.info("鑾峰彇鍒癮ccess_token: {}", tokenResponse.getAccess_token()); + createLocalSession(userInfo); - // 2. 鐢╝ccess_token鑾峰彇鐢ㄦ埛淇℃伅 - SSOUserInfo userInfo = getUserInfo(tokenResponse.getAccess_token(), isInternal); - log.info("鑾峰彇鍒扮敤鎴蜂俊鎭�: {}", userInfo); - - // 3. 鏍规嵁鐢ㄦ埛淇℃伅鍒涘缓鏈湴浼氳瘽 - String token = createLocalSession(userInfo); - - // 4. 閲嶅畾鍚戝埌鍓嶇棣栭〉锛屾惡甯oken - String frontendUrl = "/#/index?token=" + token; - response.sendRedirect(frontendUrl); - - } catch (RuntimeException e) { - log.error("SSO涓氬姟澶勭悊澶辫触: {}", e.getMessage(), e); - try { - response.sendRedirect("/login?sso_error=" + URLEncoder.encode(e.getMessage(), "UTF-8")); - } catch (Exception ex) { - log.error("閲嶅畾鍚戝け璐�", ex); - response.sendRedirect("/login?sso_error=system_error"); - } } catch (Exception e) { - log.error("SSO鐧诲綍澶勭悊澶辫触", e); - response.sendRedirect("/login?sso_error=login_failed"); + e.printStackTrace(); } } - /** - * 鏋勫缓鎺堟潈URL - */ - private String buildAuthorizationUrl(boolean isInternal) { - try { - String redirectUri = getRedirectUri(isInternal); - return getAuthorizeUrl(isInternal) + "?" + - "client_id=" + clientId + - "&redirect_uri=" + URLEncoder.encode(redirectUri, "UTF-8") + - "&response_type=code" + - "&state=" + state + - "&scope=" + URLEncoder.encode(scope, "UTF-8"); - } catch (Exception e) { - log.error("鏋勫缓鎺堟潈URL澶辫触", e); - throw new RuntimeException("鏋勫缓鎺堟潈URL澶辫触", e); + private Map<String, String> getResult(String param) { + Map<String, String> paramMap = new HashMap<>(); + + if (param == null || !param.contains("?")) { + return paramMap; } + + String query = param.substring(param.indexOf('?') + 1); + + String[] pairs = query.split("&"); + + for (String pair : pairs) { + String[] kv = pair.split("=", 2); + String key = kv[0]; + String value = kv.length > 1 ? kv[1] : ""; + paramMap.put(key, value); + } + return paramMap; } /** @@ -202,8 +151,7 @@ HttpEntity<MultiValueMap<String, String>> request = new HttpEntity<>(params, headers); - ResponseEntity<String> response = restTemplate.exchange( - getTokenUrl(isInternal), HttpMethod.POST, request, String.class); + ResponseEntity<String> response = restTemplate.exchange(getTokenUrl(isInternal), HttpMethod.POST, request, String.class); log.info("Token鍝嶅簲: {}", response.getBody()); @@ -229,8 +177,7 @@ HttpEntity<String> entity = new HttpEntity<>(headers); - ResponseEntity<String> response = restTemplate.exchange( - getUserinfoUrl(isInternal), HttpMethod.GET, entity, String.class); + ResponseEntity<String> response = restTemplate.exchange(getUserinfoUrl(isInternal), HttpMethod.GET, entity, String.class); log.info("鐢ㄦ埛淇℃伅鍝嶅簲: {}", response.getBody()); @@ -262,7 +209,9 @@ LoginUser loginUser = new LoginUser(localUser.getUserId(), localUser.getDeptId(), localUser, null); // 鐢熸垚token - return tokenService.createToken(loginUser); + String token = tokenService.createToken(loginUser); + log.info("鐢熸垚鐨則oken涓猴細{}", token); + return token; } /** -- Gitblit v1.9.3