Jetty/Grails为隐藏资源返回404,而不是403



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

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

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

这就是为什么你的过滤器不起作用。

不幸的是,您不能让使用安全性定义的端点也返回404,因为这将破坏HTTP中声明的身份验证/授权行为。(您将通过返回404而不是403来破坏许多HTTP客户端。如果请求返回404(,那么这些相同的客户端将不会发送后续认证细节

相反,您可以在另一个端口上使用/admin

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

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

另一种方法。

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

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

最新更新