我一直在努力寻找完成这项任务的最佳方法。我想隐藏不同目录和端点(fx:/admin,/resources)的存在,并希望通过返回404而不是403来实现。我试图通过实现一个grails过滤器来实现这个目的,这个过滤器将403s替换为404s,但是这似乎不起作用,解决这个问题的最佳方法是什么?
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。
/admin
/resources
admins
@admins
DefaultServlet
welcomeServlets
Handler
ServletContextHandler
1条答案
按热度按时间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。