response.sendRedirect在Servlet过滤器中无效。

5
以下过滤器位于我的prj2中。从那个prj2中,如果未找到会话,我想要重定向到prj1的登录页面,该页面的网址为/prj1/sessionexpiry。 在以下情况下,它不会重定向到登录页面,也不会抛出任何异常。
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)    
throws IOException, ServletException {
    HttpServletResponse hsr = (HttpServletResponse) res;
    HttpServletRequest hreq = (HttpServletRequest) req;
    HttpSession session = hreq.getSession(false);

    if (session == null) {
        hsr.sendRedirect("/prj1/sessionexpiry");
        return;
    } else {
        chain.doFilter(req, res);
    }
}

非常感谢您的帮助


删除 return 语句 - Afsun Khammadli
删除返回语句后,它仍然无法正常工作。 - Sunil Kumar Naik
发生了什么?如果出现任何异常或错误,请发布。 - Afsun Khammadli
不,它没有抛出任何异常。它只是没有重定向。注意:sessionexpiry在不同的应用程序中。 - Sunil Kumar Naik
你在网站服务器的日志中看到了什么吗? - Darius X.
你确定你还没有会话吗?尝试将if条件设置为“if(true)”进行验证。根据文档,它应该可以工作,并且servlet容器应该返回302。还要确保您没有更改响应的任何过滤器。 - jorgen.ringen
1个回答

0
你在注销servlet或其他地方使会话无效了吗?否则,会话将永远不会为空。
request.getSession().invalidate();

使用此方法使会话失效,下次检查会话是否有效时,将获得 null 值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接