fix:优化sso

master
HuangHuiKang 2 months ago
parent 18c915cd4b
commit bf1ef73af0

@ -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是否有效 // 验证ticket是否有效
@GetMapping("/sso/checkTicket") @GetMapping("/sso/checkTicket")
public SaResult checkTicket(@RequestParam(value = "ticket") String ticket,@RequestParam(value = "identity") Integer identity) { 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); 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<String, Object> 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()) { // if (token != null && !token.trim().isEmpty()) {
// StpUtil.setTokenValue(token); // StpUtil.setTokenValue(token);
// } // }
return SaResult.ok("验证成功!").setData(StpUtil.isLogin()); Map<String,Object> resultMap = new HashMap<>();
resultMap.put("isLogin",StpUtil.isLogin());
if (StpUtil.isLogin()){
resultMap.put("userId",StpUtil.getLoginIdAsLong());
}
return SaResult.ok("验证成功!").setData(resultMap);
} }
/** /**

Loading…
Cancel
Save