Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jetty/Grails为隐藏资源返回404,而不是403_Java_Grails_Jetty - Fatal编程技术网

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

Java Jetty/Grails为隐藏资源返回404,而不是403,java,grails,jetty,Java,Grails,Jetty,我一直在努力寻找完成这项任务的最佳方法。 我想隐藏不同目录和端点(fx:/admin,/resources)的存在,并希望通过返回404而不是403来实现 我试图通过实现一个grails过滤器来实现这一点,该过滤器将403替换为404。然而,这似乎不起作用,解决这个问题的最佳方法是什么?基于约束的安全性(可能是您的/admin和/resources端点的安全性)在发送请求之前应用 这就是你的过滤器不起作用的原因 不幸的是,您不能让使用安全性定义的端点也返回404,因为这将破坏HTTP中声明的身份

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

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

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

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

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

您可以在不同的端口上安装
/admin

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

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

另一种方法

使用位于服务器处理程序树中
ServletContextHandler
前面的自定义Jetty
处理程序(或“WebAppContext,具体取决于您的项目)

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