Jetty / Grails Return 隐藏资源的 404 而不是 403

Jetty / Grails Return 404 for hidden resources instead of 403

我一直在努力寻找完成这项任务的最佳方法。 我想隐藏不同目录和端点 (fx: /admin, /resources) 的存在,并希望通过返回 404 而不是 403 来实现。

我试图通过实现一个 grails 过滤器来实现这一点,该过滤器将 403 替换为 404,但这似乎不起作用,解决这个问题的最佳方法是什么?

在发送请求之前应用基于约束的安全性(可能是您的 /admin/resources 端点的安全性)。

这就是您的过滤器不起作用的原因。

不幸的是,您不能同时使用安全性定义端点 return 404,因为这会破坏 HTTP 中声明的身份验证/授权行为。 (您将通过 returning 404 而不是 403 来破坏许多 HTTP 客户端。如果请求 returns 404,这些相同的客户端将不会发送后续身份验证详细信息)

您可以将 /admin 放在不同的端口上。

示例:使用命名的 ServerConnector(我们称之为 admins),然后创建一个新的上下文,并通过虚拟主机配置将该上下文分配给命名的 ServerConnector(使用 @admins作为虚拟主机)在该上下文中。

至于您的 /resources 目录,如果它是从 Jetty 提供的,请关闭目录列表,并设置一个空的欢迎列表。 (或者,如果 /resources 由 Jetty 的 DefaultServlet 提供,则使用 init-param welcomeServlets 设置为 true 将“欢迎”发送到您自己的 404 servlet)

另一种方法。

在您的ServletContextHandler(或`WebAppContext,这取决于您的项目)之前使用位于服务器处理程序树中的自定义 Jetty Handler

让该处理程序查找对您有意义的特定请求 URL 和 return 404,甚至在您的上下文有机会看到它之前。