|
|
|
@ -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);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
|