java - 如果状态码为 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。
实际结果 - 我无法让它工作。
请帮忙。
解决方案
推荐阅读
- firebase - Flutter 本地通知插件显示功能不起作用
- java - JavaFx SQLite 驱动程序不适合
- html - 如何从链接到传递的参数中过滤特定的参数键?
- php - 使用 PHP 使用 javascript 解析文件 https
- text-to-speech - 试图用 system.speech 做一个语音助手。应用无响应错误
- python - 利用多线程/多处理通过 sqlalchemy 将数据插入数据库
- python - Python Pyarmor,以超级模式打包不适用于 pyinstaller - “无法执行脚本加密”
- sql - Unable to pull data for todays date (where statements worked on other tables)
- .net - 如何将在 Android 上创建的 RSA 公钥成功导入 C# .net
- jupyter-lab - 如何在 JupyterLab 中重命名文件夹?