java - Jetty / Grails 为隐藏资源返回 404 而不是 403
问题描述
我一直在努力找出完成这项任务的最佳方法。我想隐藏不同目录和端点(fx:/admin,/resources)的存在,并希望通过返回 404 而不是 403 来实现。
我试图通过实现一个 grails 过滤器来做到这一点,该过滤器将用 404s 替换 403s,但是这似乎不起作用,解决这个问题的最佳方法是什么?
解决方案
在分派请求之前应用基于约束的安全性(可能是您/admin
和/resources
端点的安全性)。
这就是你的过滤器不起作用的原因。
不幸的是,您不能让使用 security 定义的端点也返回 404,因为这会破坏 HTTP 中声明的身份验证/授权行为。(您将通过返回 404 而不是 403 来破坏许多 HTTP 客户端。如果请求返回 404,这些相同的客户端将不会发送后续身份验证详细信息)
相反,您可以/admin
使用不同的端口。
示例:使用命名的 ServerConnector(让我们调用它admins
),然后创建一个新的上下文,并通过该上下文上的虚拟主机配置(@admins
用作虚拟主机)将该上下文分配给命名的 ServerConnector。
至于您的/resources
目录,如果它是从 Jetty 提供的,请关闭目录列表,并设置一个空的欢迎列表。(或者,如果/resources
从 Jetty's 提供服务DefaultServlet
,则使用设置为 true 的 init-paramwelcomeServlets
将“欢迎”发送到您自己的 404 servlet)
另一种方法。
使用位于Handler
您之前的服务器处理程序树中的自定义 Jetty ServletContextHandler
(或`WebAppContext,这取决于您的项目)。
让该处理程序查找对您有意义的特定请求 URL,并在您的上下文甚至有机会看到它之前返回 404。
推荐阅读
- python - 如何在 python pyvista 中读取 dem 文件
- c++ - c ++:将父类转换为子类并调用子类的函数
- javascript - `yarn add` 和 `npm install --save` 都不会将包安装到本地项目
- javascript - Firebase SDK 身份验证 reauthenticateWithCredential 有什么意义?
- spring-boot - 弹簧配置文件未加载某些属性?
- ios - 为什么通知服务扩展没有在 iOS 14 上触发?
- scala - 将 Scala 3.0 SDK 添加到 IntelliJ
- python - 在 python 中使用 pymodbus 读取离散输入
- ios - iOS - 仅使用 Opus 编解码器的 WebRTC 单向音频
- python - 在给定系数列表的情况下计算互补 CDF