From 4150c82e8950b5f7dac332adb3ff751d8e88a4cd Mon Sep 17 00:00:00 2001 From: sh Date: Mon, 17 Nov 2025 10:56:24 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=92=E8=81=94=E7=BD=91?= =?UTF-8?q?=E5=8D=95=E7=82=B9=E7=99=BB=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysLoginController.java | 58 +++++++++++++++++++ .../framework/config/SecurityConfig.java | 3 +- .../web/service/OauthLoginHlwService.java | 24 ++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java index e95c098..a07d783 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java @@ -3,6 +3,7 @@ package com.ruoyi.web.controller.system; import java.util.List; import java.util.Set; +import com.ruoyi.common.core.domain.entity.tymh.wwToken.WwTokenResult; import com.ruoyi.common.core.domain.entity.tymh.wwToken.WwUserLogin; import com.ruoyi.common.core.domain.model.RegisterBody; import com.ruoyi.common.utils.StringUtils; @@ -21,6 +22,8 @@ import com.ruoyi.framework.web.service.SysLoginService; import com.ruoyi.framework.web.service.SysPermissionService; import com.ruoyi.system.service.ISysMenuService; +import javax.servlet.http.HttpServletRequest; + /** * 登录验证 * @@ -203,4 +206,59 @@ public class SysLoginController .put("token", token) .put("accessUrl", ""); } + + /** + *互联网获取token + * @return + */ + @GetMapping("/getWwTjmHlwToken") + public AjaxResult getWwTjmHlwToken(HttpServletRequest request){ + String token = request.getHeader("Authorization"); + if (token != null && token.startsWith("Bearer ")) { + token = token.substring(7); + } + + String cookieValue = null; + javax.servlet.http.Cookie[] cookies = request.getCookies(); + if (cookies != null) { + for (javax.servlet.http.Cookie cookie : cookies) { + if ("portal_auth".equals(cookie.getName())) { + cookieValue = cookie.getValue(); + break; + } + } + } + + boolean isTokenValid = validateToken(token); + boolean isCookieValid = validateCookie(cookieValue); + if (isTokenValid && isCookieValid) { + WwTokenResult wwTokenResult=new WwTokenResult(); + wwTokenResult.setAccessToken(token); + wwTokenResult.setSessionCookie(cookieValue); + String localToken = oauthLoginHlwService.getWwTjmHlwToken(wwTokenResult); + return AjaxResult.success("门户登录成功") + .put("token", localToken) + .put("accessUrl", ""); + } else { + return AjaxResult.error("登录失效,请重新登录"); + } + } + + /** + * 验证token + * @param token + * @return + */ + private boolean validateToken(String token) { + return token != null && !token.isEmpty() && token.matches("^[A-Za-z0-9_-]{36}$"); + } + + /** + * 验证cookie + * @param cookieValue + * @return + */ + private boolean validateCookie(String cookieValue) { + return cookieValue != null && !cookieValue.isEmpty(); + } } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java index 77639be..7c3a8c2 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java @@ -111,7 +111,8 @@ public class SecurityConfig .authorizeHttpRequests((requests) -> { permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll()); // 对于登录login 注册register 验证码captchaImage 允许匿名访问 - requests.antMatchers("/login", "/register", "/captchaImage","/app/login","/websocket/**","/speech-recognition","/speech-synthesis","/cms/company/listPage","/cms/appUser/noTmlist","/getTjmhToken","/getWwTjmhToken").permitAll() + requests.antMatchers("/login", "/register", "/captchaImage","/app/login","/websocket/**","/speech-recognition","/speech-synthesis", + "/cms/company/listPage","/cms/appUser/noTmlist","/getTjmhToken","/getWwTjmhToken","/getWwTjmHlwToken").permitAll() // 静态资源,可匿名访问 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll() // 移动端公用查询,可匿名访问 diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/OauthLoginHlwService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/OauthLoginHlwService.java index d393c44..4bdd148 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/OauthLoginHlwService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/OauthLoginHlwService.java @@ -217,4 +217,28 @@ public class OauthLoginHlwService { sysUser.setLoginDate(new Date()); sysUserService.updateUserProfile(sysUser); } + + /** + * 获取互联网token + * @param wwTokenResult + * @return + */ + public String getWwTjmHlwToken(WwTokenResult wwTokenResult){ + try { + //获取门户userInfo + WwTyInfo portalUser = oauthClient.wwGetUserInfo(wwTokenResult); + //匹配/创建本地用户 + String localUsername = getOrCreateLocalUser(portalUser); + //执行原来的登录流程 + Authentication authentication = authenticateLocalUser(localUsername); + AsyncManager.me().execute(AsyncFactory.recordLogininfor(localUsername, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); + LoginUser loginUser = (LoginUser) authentication.getPrincipal(); + + storePortalToken(loginUser.getUserId(), wwTokenResult.getAccessToken()); + recordLoginInfo(loginUser.getUserId()); + return tokenService.createToken(loginUser); + } catch (Exception e) { + throw new ServiceException("OAuth 登录失败:" + e.getMessage()); + } + } } \ No newline at end of file