哎, 由于刚毕业想做一个项目, 用到了 Shiro 来做权限管理, 可是万万没想到刚开始做就出了问题, 原因是因为登录的时候使用 ajax 进行请求的.
登录成功后却一直无法进行页面跳转如下图:
可以看到 我们将数据提交到
login.do
登录成功了后会重定向到index.jsp
页面, 但是浏览器却还是停留在 登录界面.这点让我感觉操蛋!!!
但是我们看请求发现:
返回一个302错误, 额 我们不管这个状态码是啥, 我们说说怎么处理.
首先我们确定这个请求是 ajax 的, 而且之间的数据传递是 json , 那么我们也需要返回 json 是不是才算完成了一个完整的请求/响应.我们添加如下代码
public class CustomFormAuthenticationFilter extends FormAuthenticationFilter {
@Override
protected boolean onLoginSuccess(AuthenticationToken token, Subject subject, ServletRequest request, ServletResponse response) throws Exception {
HttpServletRequest httpServletRequest = WebUtils.toHttp(request);
HttpServletResponse httpServletResponse = WebUtils.toHttp(response);
if (!"XMLHttpRequest".equalsIgnoreCase(httpServletRequest.getHeader("X-Requested-With"))) {// 不是ajax请求
return super.onLoginSuccess(token, subject, request, response);
} else {
httpServletResponse.setCharacterEncoding("UTF-8");
PrintWriter out = httpServletResponse.getWriter();
out.println("{\"resultInfo\":\"s\"}");
out.flush();
out.close();
}
return false;
}
}