jetty/grails返回404作为隐藏资源,而不是403

txu3uszq  于 2021-07-08  发布在  Java
关注(0)|答案(1)|浏览(362)

我一直在努力寻找完成这项任务的最佳方法。我想隐藏不同目录和端点(fx:/admin,/resources)的存在,并希望通过返回404而不是403来实现。
我试图通过实现一个grails过滤器来实现这个目的,这个过滤器将403s替换为404s,但是这似乎不起作用,解决这个问题的最佳方法是什么?

20jt8wwn

20jt8wwn1#

基于约束的安全性(可能是 /admin 以及 /resources 在分派请求之前,应用了(的)来保护端点。
所以你的过滤器坏了。
不幸的是,不能让用security定义的端点也返回404,因为这将破坏http中声明的身份验证/授权行为(通过返回404而不是403,您将破坏许多http客户机。如果请求返回404,这些相同的客户端将不会发送后续的身份验证详细信息)
相反,你可以 /admin 在另一个港口。
示例:使用命名的serverconnector(让我们称之为 admins ),然后创建一个新的上下文,并通过虚拟主机配置(使用 @admins 作为虚拟主机)。
至于你的 /resources 目录,如果是从jetty提供的,关闭目录列表,并设置一个空的欢迎列表(或者,如果 /resources 从码头餐厅供应 DefaultServlet ,然后使用init参数 welcomeServlets 设置为true以将“欢迎”发送到您自己的404servlet)
另一种方法。
使用定制码头 Handler 位于服务器处理程序树中 ServletContextHandler (或“webappcontext”,这取决于您的项目)。
让处理程序查找对您有意义的特定请求url,并在您的上下文有机会看到它之前返回404。

相关问题