如果状态码最初将是403,我想使用Servlet过滤器在传出响应上设置状态码404。这主要是因为我想防止任何攻击者知道资源的存在。 / p>
我知道这不能通过简单的HttpServletResponse来完成-在if(status==403)
之后不更改chain.dofilter()
条件内的响应代码,因为响应已经提交,因此什么也不做。
我尝试了此处答案中给出的代码-Response is committing and doFilter chain is broken
但是它给了我以下错误:-
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。
实际结果-我无法使用它。
请帮助。