弹簧过滤器递归重定向



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

因此,当用户验证时,过滤器仍然一次又一次地重定向到自身。

这是我的过滤器代码:

@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 我检查过,会话属性帐户名不为空。

看起来你最后没有打电话给fc.doFilter(sr, sr1)。 response.sendRedirect没有意义,如果不在它后面使用doFilter。

最新更新