response.sendRedirect 在 Servlet 过滤器中不起作用

Posted

技术标签:

【中文标题】response.sendRedirect 在 Servlet 过滤器中不起作用【英文标题】:response.sendRedirect is not working in Servlet Filter 【发布时间】:2015-07-15 05:58:04 【问题描述】:

以下过滤器在我的prj2 中。从prj2 开始,我正在检查会话是否不存在,我想重定向到prj1 的登录页面,该页面的URL 为/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声明 删除return语句后也不起作用 发生了什么?如有异常或错误请发帖。 不,它没有抛出任何异常。它根本不是重定向,注意:sessionexpiry 在不同的应用程序中 您在网络服务器的日志中看到什么了吗? 【参考方案1】:

您是否在注销 servlet 或其他地方使会话无效?否则,会话将永远不会为空。

request.getSession().invalidate();

使用它使会话无效,然后下次检查会话是否有效时,它将获得空值。

【讨论】:

以上是关于response.sendRedirect 在 Servlet 过滤器中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

response.sendRedirect() 有啥用?

我遇到的response.sendRedirect跳转不了问题

response.sendredirect为啥跳转不了

求jsp中response.sendRedirect()实例;

response.sendRedirect() 和 request.getRequestDispatcher().forward(request,response) 有啥区别 [重复]

response.sendRedirect - 检查重定向是不是启动