diff --git a/src/main/java/com/ngskcloud/controller/SsoServerController.java b/src/main/java/com/ngskcloud/controller/SsoServerController.java index bd45e46..a24c670 100644 --- a/src/main/java/com/ngskcloud/controller/SsoServerController.java +++ b/src/main/java/com/ngskcloud/controller/SsoServerController.java @@ -177,6 +177,74 @@ public class SsoServerController { } + + // 注销 + @GetMapping("/sso/switchIdentity") + public SaResult switchIdentity(@RequestParam("userId") Long userId,@RequestParam("identity") Integer identity) { + try { + + // 根据identity判断登录类型 + if (identity == null ){ + return SaResult.error("identity字段不能为空"); + }else if (1==identity) { + return getUserToken(userId); + } else if (2==identity) { + return getAdminToken(userId,identity); + } else { + return SaResult.error("identity字段仅能为1-用户或者2-admin"); + } + + }catch (Exception e){ + throw new RuntimeException(e.getMessage()); + } + } + + private SaResult getAdminToken(Long userId,Integer identity) { + AdminUser adminUser = adminUserService.findById(userId); + + StpUtil.login( + adminUser.getId(), + SaLoginConfig.setExtra("url", RequestUtil.url()) + + .setExtra("prv", SystemConstant.JWT_PRV_ADMIN_USER) + .setExtra("identity", identity) + + .setExtra( + "exp", + String.valueOf( + System.currentTimeMillis() / 1000 + +expired))); + + return SaResult.ok("登录成功!").setData(StpUtil.getTokenValue()); + + } + + private SaResult getUserToken(Long userId) { + User user = userService.find(userId); + + StpUtil.login( + user.getId(), + SaLoginConfig.setExtra("url", RequestUtil.url()) + .setExtra("user_name",user.getName()) + .setExtra("account",user.getAccount()) + .setExtra("user_id",user.getId()) + .setExtra("avatar",user.getAvatar()) + .setExtra("jti", UUID.randomUUID().toString()) + .setExtra("prv", SystemConstant.JWT_PRV_USER) + .setExtra("tenant_id", "000000") + .setExtra("isAdmin", Boolean.TRUE) + .setExtra( + "exp", + String.valueOf( + System.currentTimeMillis() / 1000 + + expired))); + + return SaResult.ok("登录成功!").setData(StpUtil.getTokenValue()); + + + } + + // 验证ticket是否有效 @GetMapping("/sso/checkTicket") public SaResult checkTicket(@RequestParam(value = "ticket") String ticket,@RequestParam(value = "identity") Integer identity) { @@ -211,89 +279,6 @@ public class SsoServerController { return SaResult.ok("验证成功!").setData(map); } -// // 会话是否登录 -// @GetMapping("/sso/isLogin") -// public SaResult isLogin(@RequestParam(value = "token", required = false) String token) { -//// StpUtil.getTokenValue(); -// -//// if (token != null && !token.trim().isEmpty()) { -//// StpUtil.setTokenValue(token); -//// } -//// return SaResult.ok("验证成功!").setData(StpUtil.isLogin()); -// -// try { -// // 1. 参数校验 -// if (token == null || token.trim().isEmpty()) { -// return SaResult.error("token不能为空").setData(400); -// } -//// -//// if (identity == null) { -//// return SaResult.error("identity身份类型不能为空").setCode(400); -//// } -//// -//// if (identity != 1 && identity != 2) { -//// return SaResult.error("identity只能为1(用户)或2(管理员)").setCode(400); -//// } -//// -// // 2. 设置当前token上下文 -// StpUtil.setTokenValue(token); -// -// // 3. 基础登录状态验证 -// if (!StpUtil.isLogin()) { -// return SaResult.error("token无效或已过期").setCode(401); -// } -// -// // 4. 获取登录ID并验证身份一致性 -// Object loginId = StpUtil.getLoginIdDefaultNull(); -// if (loginId == null) { -// return SaResult.error("无法获取用户信息").setCode(401); -// } -// -// // 5. 验证token活跃状态(防止token被踢出) -// if (!StpUtil.isLogin(loginId)) { -// return SaResult.error("token已被踢出或失效").setCode(401); -// } -// -// -// // 6. 根据身份类型进行额外验证 -// Integer identity = (Integer) StpUtil.getExtra("identity",""); -// -// boolean isValid = validateUserIdentity(loginId,identity,token); -// if (!isValid) { -// return SaResult.error("身份类型与token不匹配").setCode(403); -// } -// -// // 7. 获取token剩余有效期 -// long timeout = StpUtil.getTokenTimeout(); -// -//// // 8. 返回详细的验证结果 -//// Map result = new HashMap<>(); -//// result.put("isLogin", true); -//// result.put("loginId", loginId); -//// result.put("tokenTimeout", timeout); -//// result.put("tokenActive", StpUtil.getTokenActiveTimeout()); -//// result.put("sessionTimeout", StpUtil.getTokenSessionTimeout()); -// -// // 添加用户基本信息 -//// addUserInfoToResult(result, loginId, identity); -// -// return SaResult.ok("token验证成功").setData(Boolean.TRUE); -// -// } catch (Exception e) { -// // 记录日志 -// // log.error("token验证异常: {}", e.getMessage(), e); -// return SaResult.error("token验证异常: " + e.getMessage()).setCode(500); -// } -// -// } - -// // 会话是否登录 -// @GetMapping("/sso/isLogin") -// public SaResult isLogin() { -// StpUtil.getTokenValue(); -// -// return SaResult.ok("验证成功!").setData(StpUtil.isLogin()); -// } // 会话是否登录 @@ -304,7 +289,12 @@ public class SsoServerController { // if (token != null && !token.trim().isEmpty()) { // StpUtil.setTokenValue(token); // } - return SaResult.ok("验证成功!").setData(StpUtil.isLogin()); + Map resultMap = new HashMap<>(); + resultMap.put("isLogin",StpUtil.isLogin()); + if (StpUtil.isLogin()){ + resultMap.put("userId",StpUtil.getLoginIdAsLong()); + } + return SaResult.ok("验证成功!").setData(resultMap); } /**