【问题标题】:Disable access by file extension in Tomcat web.xml在 Tomcat web.xml 中禁用按文件扩展名访问
【发布时间】:2009-07-21 18:33:39
【问题描述】:

提前感谢大家-

如何按文件类型禁用通过浏览器的访问?

例如,如果我想禁用对 .xml 文件的所有访问权限,我该怎么做?

谢谢

【问题讨论】:

    标签: tomcat web.xml


    【解决方案1】:

    我自己想要一个答案,但对 JDBCRealm 的答案不满意。

    默认隐藏文件夹“WEB-INF”和“META-INF”在静态资源逻辑中是硬编码的,因此使用相同的机制似乎非常困难。您必须替换或修改DefaultServletStandardContextStandardContextValve 的某些组合。真是一团糟。

    但是我尝试了两种简单的方法来完成您所追求的过滤。

    使用Filter

    您可以编写一个通用的 Servlet 过滤器来为任何匹配某个列表的文件返回 404 错误。您可以将该列表设置为 context.xml 中的 Environment Entries、类路径上的 properties file、存储在数据库中或任何您喜欢的(即使是硬编码字符串,如果您是某种受虐狂)。

    使用Valve (特定于Tomcat)

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

    【讨论】:

      【解决方案2】:

      还有更简单的方法。您只需将具有特定扩展名的所有请求重定向到某个空 servlet。

      像这样:

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

      【讨论】:

        【解决方案3】:

        这不适用于不接受没有相应 servlet 声明的 servlet 映射的 Tomcat。 我建议编写一个简单的 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>
        

        【讨论】:

          【解决方案4】:

          据我所知,没有直接的解决方案。最后of this post 解释了如何使用JDBCRealm 围绕您的选举的某些文件创建安全上下文。如果用户尝试访问与您的模式匹配的文件(在您的情况下为 *.xml),他们将被重定向到登录或错误页面。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-12-01
            • 1970-01-01
            • 2012-12-11
            相关资源
            最近更新 更多