在Tomcat web.xml中禁用按文件扩展名访问

ut6juiuv  于 2023-03-02  发布在  其他
关注(0)|答案(5)|浏览(244)

提前感谢大家-
我该如何按文件类型禁用通过浏览器的访问?
例如,如果我想禁用对.xml文件的所有访问,我将如何进行呢?
谢谢

t1rydlwq

t1rydlwq1#

还有一种更简单的方法,只需将所有具有特定扩展名的请求重定向到某个空servlet。
就像这样:

<servlet-mapping>
   <servlet-name>Empty Servlet</servlet-name>
   <url-pattern>*.xml</url-pattern>
</servlet-mapping>
e4yzc0pl

e4yzc0pl2#

这不适用于Tomcat,因为Tomcat不接受没有相应servlet声明的servletMap。我建议编写一个简单的ErrorServlet,系统地发送404,例如:

package com.yourpackage;

public class ErrorServlet extends HttpServlet{
  public ErrorServlet(){
  }
  public void service(HttpServletRequest request, HttpServletResponse response){
    response.sendError(HttpServletResponse.SC_NOT_FOUND);
  }
}

然后在web.xml文件中添加相应的配置:

<servlet>
  <description>Servlet that displays a 404</description>
  <display-name>error</display-name>
  <servlet-class>com.yourpackage.ErrorServlet</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>error</servlet-name>
   <url-pattern>*.xhmtl</url-pattern>
</servlet-mapping>
y1aodyip

y1aodyip3#

据我所知,没有简单的解决方案。在of this post的结尾,它解释了如何使用JDBCRealm围绕您选择的一些文件创建安全上下文。如果用户试图访问与您的模式匹配的文件(在您的示例中为 *.xml),他们将被重定向到登录或错误页面。

iecba09b

iecba09b4#

我知道这是一个老问题,但这里有一个解决方案对我很有效。它利用web.xml中的security-constraint元素。您可以将其放在该文件的web-app XML元素中:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>block_xml</web-resource-name>
        <url-pattern>*.xml</url-pattern>
    </web-resource-collection>
    <auth-constraint />
</security-constraint>

这可以放在给定web应用程序的web.xml(WEB-INF/web.xml)或conf/web.xml(影响所有应用程序)中。

1rhkuytd

1rhkuytd5#

我自己也想知道这个问题的答案,但对JDBCArem的答案并不满意。
默认的隐藏文件夹“WEB-INF”和“META-INF”在Static Resource逻辑中是硬编码的,因此使用相同的机制似乎非常困难。您必须替换或修改DefaultServletStandardContextStandardContextValve的某些组合。
但是我尝试了两种简单的方法来完成你所追求的过滤。

使用Filter

你可以编写一个通用的Servlet过滤器,对任何与某个列表匹配的文件返回404错误,也可以将该列表设置为context.xml中的Environment Entries、类路径中的properties file、存储在数据库中或任何你喜欢的东西(如果你是某种受虐狂,甚至可以硬编码为String)。

使用Valve(特定于Tomcat)

Tomcat Valves完成了与Filter几乎相同的任务,但是级别较低。它们不是Servlet Spec的一部分,因此您的应用程序无法移植到其他Servlet容器。此外,在我的实验中,发送404响应与在应用程序中正常发送404响应的通道不同(例如,如果您设置了自定义404页面或处理程序,则当404从Valve返回时不会使用它们)

相关问题