问题描述:
环境
Springboot + shiro
前情
shiro 配置好后,登录成功后会生成 auth_token 保存并返回给前端 ,客户端往后每次发送请求都携带 auth_token 在请求头中,以此来判断登录状态。当请求不携带 auth_token 时判断为没登录,会跳转至提醒用户登录的接口(假设为 “/unauthorized”)。
问题发生过程
当发送请求时,携带一个错误的 auth_token 请求头,此时不会跳转,后台会出现 ”shiro Enabling session validation scheduler…“ 的问题。
问题排查
经过排查发现,下面是我自己写的 SessionManager ,用来判断请求是否携带了 “auth_token” 这个 token信息 ,如果携带了则把该 auth_token 返回交给 shiro 底层判断跟之前登录保存的 auth_token 是否一致,不一致则跳转到 “/unauthorized” 接口。
public class CustomWebSessionManager extends DefaultWebSessionManager {
public static final String AUTH_HEAD_TOKEN = "auth_token";
@Override
protected Serializable getSessionId(ServletRequest request, ServletResponse response) {
if (request instanceof HttpServletRequest) {
HttpServletRequest req = (HttpServletRequest) request;
System.out.println(req.getRequestURL());
String sessionId = req.getHeader(AUTH_HEAD_TOKEN);
if (!StringUtils.isEmpty(sessionId)) {
return sessionId;
}
}
return super.getSessionId(request, response);
}
}
问题就出现在这里,我输入了错误的 auth_tok