From 722b8c99736bb246c5ea95d0b1317f153afc1768 Mon Sep 17 00:00:00 2001 From: chenyanchang <30190327@qq.com> Date: Wed, 20 May 2026 17:15:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8D=95=E7=82=B9=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/system/SysLoginController.java | 15 ++++-- .../framework/web/service/SsoService.java | 49 ++++++++++++++++++- 2 files changed, 59 insertions(+), 5 deletions(-) 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 7705f7c..6b5f498 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 @@ -300,10 +300,17 @@ public class SysLoginController return loginService.companyLoginOrRegister(loginBody); } - @ApiOperation("单点登录") - @PostMapping("/sso/login") - public AjaxResult ssoCheck(@RequestBody JSONObject param) { - JSONObject result = ssoService.ssoCheck(param); + @ApiOperation("单点登录-code") + @PostMapping("/sso/code/login") + public AjaxResult codeLogin(@RequestBody JSONObject param) { + JSONObject result = ssoService.ssoCodeLogin(param); + return AjaxResult.success(result); + } + + @ApiOperation("单点登录-token") + @PostMapping("/sso/token/login") + public AjaxResult ssoTokenLogin(@RequestBody JSONObject param) { + JSONObject result = ssoService.ssoTokenLogin(param); return AjaxResult.success(result); } diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java index a575481..308af1c 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SsoService.java @@ -58,7 +58,7 @@ public class SsoService { final String APP_USER_TOKEN_KEY = "app:user:token:"; - public JSONObject ssoCheck(JSONObject param) { + public JSONObject ssoCodeLogin(JSONObject param) { if (ObjectUtils.isEmpty(param)) { throw new RuntimeException("请求参数不能为空"); } @@ -124,6 +124,53 @@ public class SsoService { return tokenSiteService.createToken(loginSiteUser); } + + public JSONObject ssoTokenLogin(JSONObject param) { + if (ObjectUtils.isEmpty(param)) { + throw new RuntimeException("请求参数不能为空"); + } + //浪潮token + String lcToken = param.getString("token"); + //获取用户信息 + JSONObject pJson = new JSONObject(); + pJson.put("appId", webAppId); + pJson.put("appSecret", webAppSecret); + JSONObject userJson = getUserInfo(WEB_GET_USER_INFO, lcToken, pJson.toJSONString()); + if (ObjectUtils.isEmpty(userJson)) { + throw new RuntimeException("获取用户信息失败"); + } + //获取身份证号 + String personCardNo = null; + JSONObject info = null; + if (userJson.containsKey("info")) { + info = userJson.getJSONObject("info"); + if (ObjectUtils.isNotEmpty(info) && info.containsKey("personCardNo")) { + personCardNo = info.getString("personCardNo"); + //解密处理 + if (StringUtils.isEmpty(personCardNo)) { + throw new RuntimeException("获取用户证件信息失败"); + } + personCardNo = EncryptUtil.decryptByAppIdAndSecret(personCardNo, webAppId, webAppSecret); + } + } + + //用身份证号查询用户 + AppUser appUser = appUserService.selectAppuserByIdcard(personCardNo); + if (appUser == null) { + //用户不存在,则先保存用户 + appUser = saveAppUser(userJson); + } + //用户存在,生成本系统用户的token + String token = loginApp(appUser, info.getString("userName")); + //缓存token +// String userKey = APP_USER_TOKEN_KEY + userJson.getString("userId"); +// redisCache.setCacheObject(userKey, token, 2, TimeUnit.HOURS); + JSONObject backJson = new JSONObject(); + backJson.put("token", token); + backJson.put("lcToken", lcToken); + return backJson; + } + //获取token private String getToken(String url, String token, String params) { try {