首页 > 解决方案 > 如果状态码为 403,则使用过滤器设置响应 404 的状态码

问题描述

如果状态码最初是 403,我想使用 Servlet 过滤器在传出响应上设置状态码 404。这基本上是因为我想防止任何攻击者知道资源的存在。

我知道这不能通过简单的 HttpServletResponse 来完成 - 在if(status==403)条件内更改响应代码后chain.dofilter()什么也不做,因为响应已经提交。

我在这里尝试了答案中给出的代码 -响应正在提交并且 doFilter 链已损坏

但它给了我以下错误: -

java.io.IOException: UT010029: Stream is closed
at io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:133)
at io.undertow.servlet.spec.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:125)
at CODE.filter.ResourceNotFoundFilter.doFilter(ResourceNotFoundFilter.java:76)

我认为上述答案包含的内容超出了我的要求,我想去掉不需要的部分,但我不确定是哪些部分。另外,我有多个过滤器,这个必须是链中的最后一个。我是否必须从一开始就创建一个响应包装器并将该包装器传递给所有过滤器?或者我可以对之前的所有过滤器使用简单的 HttpServletResponse 吗?

上面产生的错误基本上是因为代码中的这一行。这是我文件中的第 76 行。

response.getOutputStream().write(wrapper.getWrapperBytes());

预期结果 - 如果它最初将是 403,我想使用过滤器将状态代码更改为 404。

实际结果 - 我无法让它工作。

请帮忙。

标签: javahttpresponseservlet-filters

解决方案


推荐阅读