Shiro15-坑

2017-05-30  本文已影响58人  我相信你爱过gg

哎, 由于刚毕业想做一个项目, 用到了 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;
    }
}
上一篇 下一篇

猜你喜欢

热点阅读