代码之家  ›  专栏  ›  技术社区  ›  Sam

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

  •  4
  • Sam  · 技术社区  · 17 年前

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

    谢谢

    5 回复  |  直到 17 年前
        1
  •  3
  •   drfloob    17 年前

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

    默认的隐藏文件夹“WEB-INF”和“META-INF”在静态资源逻辑中是硬编码的,因此使用相同的机制似乎非常困难。您必须替换或修改以下各项的组合 DefaultServlet , StandardContext ,以及 StandardContextValve

    使用a Filter

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

    使用a Valve (特定于Tomcat)

    Servlet Spec

        2
  •  3
  •   Clever Developer    15 年前

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

    这样地:

    <servlet-mapping>
       <servlet-name>Empty Servlet</servlet-name>
       <url-pattern>*.xml</url-pattern>
    </servlet-mapping>
    
        3
  •  1
  •   Codeboy    14 年前

    这不适用于不接受没有相应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
  •  0
  •   jdecuyper    17 年前

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

        5
  •  0
  •   charlie arehart    3 年前

    <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(以影响所有应用程序)中。