Servlet过滤器重定向:如何在chain.doFilter(request,resp)之后重定向;

Posted

技术标签:

【中文标题】Servlet过滤器重定向:如何在chain.doFilter(request,resp)之后重定向;【英文标题】:Servlet Filter redirect: How to redirect after chain.doFilter(request,resp); 【发布时间】:2014-08-13 08:15:07 【问题描述】:

我有一个 servlet 过滤器类。在 doFilter 函数内部,我想在 chain.doFilter(request,response) 调用后重定向到自定义 URL。

现在我知道我不能同时调用 chain.doFilter(request,response)response.redirect("www.customURL.com")。 但想法是,过滤器链完成后浏览器重定向到customUrl。

如何在我的servlet过滤器类的doFilter函数中实现这一点(显然实现了过滤器类)。

谢谢。

【问题讨论】:

【参考方案1】:

简短的回答:你不能。

稍长一点的答案:重新排序您的过滤器。请注意要在重定向过滤器之前添加的所有过滤器。过滤器按添加到web.xml 的顺序进行处理。

【讨论】:

【参考方案2】:

如果您包装响应对象并实现任何将响应显式或隐式提交为 NO-OP 的调用,则可以执行此操作。这样做实际上是在丢弃过滤器链生成的响应。

【讨论】:

以上是关于Servlet过滤器重定向:如何在chain.doFilter(request,resp)之后重定向;的主要内容,如果未能解决你的问题,请参考以下文章

从 Web 应用程序中的 servlet 过滤器重定向到上一页

从 servlet 过滤器重定向到 jsf 会返回未呈现为 html 的实际 jsf 代码

从过滤器重定向到 JSP 时传递属性:会话与请求

身份验证过滤器重定向回 Laravel 中的原始 POST 请求

服务器重定向和客户端重定向

如何在从 servlet 过滤器执行 HTTP 重定向时保留请求正文