@RequestMapping(value = { "/sso" }, method = { RequestMethod.GET })
public String sso(HttpServletRequest request) {
String loginName = "";
try {
String token = request.getParameter("token");
final Base64.Decoder decoderBase64 = Base64.getDecoder();
byte[] decoderBase64Content = decoderBase64.decode(token);
String tokenString = new String(decoderBase64Content);
if(tokenString.length()<=12) {
request.setAttribute("msg", "无效token");
return "login";
}
String dateString = tokenString.substring(0, 12);
long dateTime = DateUtil.toDate(dateString, "yyyyMMddHHmm").getTime();
if(!EncryptUtil.validateTime(String.valueOf(dateTime))) {
request.setAttribute("msg", "超时token");
return "login";
}
loginName = tokenString.substring(12);
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("msg", "无效token");
return "login";
}
if(loginName.equals("admin")) {
request.setAttribute("loginName", loginName);
request.setAttribute("msg", "管理员不支持单点登录,请输入账号密码!");
return "login";
}
if (!StringUtil.isEmpty(loginName)) {
User user = this.userService.queryByUserLabel(loginName);
if (user != null) {
if(user.getUserStatus().equals(EnumADStatus.unactivated)) {
request.setAttribute("loginName", loginName);
request.setAttribute("msg", "用户未激活");
return "login";
}
} else {
request.setAttribute("msg", "用户不存在");
return "login";
}
request.getSession().setAttribute("loginName", loginName);
UserSession.web2Service(request);
this.logger.debug(loginName + " login success");
return "redirect:/index/index.htm";
}
this.logger.debug(loginName + " login fail");
return "login";
}
public static void main(String[] args) {
String token = "1234567890";
String ss = Base64.getEncoder().encodeToString(token.getBytes());
System.out.println(ss);
String dateTime = token.substring(0, 12);
String loginName = token.substring(12);
System.out.println(dateTime+"_"+loginName);
}
http://1.1.1.1/brweb/sso?token="+strpass
本文详细介绍了如何通过HttpServletRequest处理来自/sso端点的GET请求,涉及Base64解码验证token、时间有效性检查及用户身份验证流程。核心代码展示了如何解析和验证token,并针对管理员权限和用户状态进行处理。
2067

被折叠的 条评论
为什么被折叠?



