Spring Filter递归重定向

时间:2016-04-26 06:50:41

标签: java spring spring-mvc filter

我正在尝试使用我的SSO系统自动登录用户。

因此,当用户验证时,Filter仍会一次又一次地重定向到自身。

这是我的过滤器代码:

@Override
    public void doFilter(ServletRequest sr, ServletResponse sr1, FilterChain fc) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) sr;
        HttpSession session = ((HttpServletRequest) sr).getSession(false);
        if (session != null && session.getAttribute("accountName") != null) {
            fc.doFilter(sr, sr1);
            return;
        }
        try {
            TicketInfo ticketInfo = sso.getTicketInfo(request);
            if (ticketInfo != null && (ticketInfo.getResult().equals(Result.SUCCESS)) && ticketInfo.getUserName() != null) {
                if (ticketInfo.getExpireDate().compareTo(new Date()) >= 1) {
                    String accountName = ticketInfo.getUserName();
                    if(session!=null){
                        session.setAttribute("accountName", accountName);
                    }
                    fc.doFilter(sr, sr1);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        HttpServletResponse response = (HttpServletResponse) sr1;

        response.sendRedirect("http://sso-login.test");
    }

我做错了什么?我认为这部分代码

if (session != null && session.getAttribute("accountName") != null) {
    fc.doFilter(sr, sr1);
    return;
}

过滤器必须停止重定向并链接我的请求,但看起来它仍然会重定向到sso-login。

非常感谢您的关注。

PS我检查过,会话属性帐户名不为空。

1 个答案:

答案 0 :(得分:0)

看来您最后没有打fc.doFilter(sr, sr1)。 response.sendRedirect如果不使用doFilter则没有任何意义。