【问题标题】:Servlet Filter for all requests所有请求的 Servlet 过滤器
【发布时间】:2011-12-18 11:48:59
【问题描述】:

我想知道,如何在 web.xml 中设置一个在每个请求上调用的过滤器?

【问题讨论】:

    标签: java servlets servlet-filters


    【解决方案1】:

    使用“*”通配符添加过滤器映射。

      <filter-mapping>
       <filter-name>TestFilter</filter-name>
       <url-pattern>*</url-pattern>
     </filter-mapping>
    

    【讨论】:

    • 过滤器没有被调用,例如mysite.com?blahblah,当查询字符串不是绑定到一个servlet而是绑定到根url时。你知道解决办法吗?
    • 我有一个完全相同的问题,我的过滤器不会为来自客户端的每个请求调用。我需要一个过滤器来捕获所有请求,无论它们是在应用程序级别还是 jboss 容器级别...
    • 能否通过servlet过滤器捕获Tomcat中的所有请求(webapp & non-webapp contextx)?
    • @M.S.Naidu 你找到解决方案了吗?我知道这是一个旧线程,但我面临同样的问题。有什么帮助吗?
    【解决方案2】:

    只需创建一个过滤器,并将其映射到 /*

    例如

        <filter>
            <filter-name>MyFilter</filter-name>
            <filter-class>com.mycompany.MyFilter</filter-class>
        </filter>
        <filter-mapping>
            <filter-name>MyFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    

    【讨论】:

    • 过滤器没有被调用,例如mysite.com?blahblah,当查询字符串不是绑定到servlet而是绑定到根url时。你知道解决办法吗?
    • 它应该被调用。您能否检查一下与 mysite.com 关联的 servlet 是如何映射的?如果 mysite.com 是直接从 Web 服务器呈现的静态页面,则可能是 Java 应用程序永远不会对该 URL 进行访问。
    • 如果是这样,那么我如何将过滤器绑定到根 url?
    • 如果根 url 不是通过 java 应用程序提供的,很遗憾你不能附加过滤器:-)。如果您需要提供过滤器,您可以使用重定向规则模仿网络服务器上的行为,或者获取 java 应用程序提供的根 url。
    【解决方案3】:

    您确定请求正在访问控制器/servlet?如果它正在进行 Ajax 调用或运行一些 JS,则过滤器不会命中。

    【讨论】:

      【解决方案4】:

      Spring Security Web 将所有 url 定义为 /**。所以它应该适用于所有请求。

      见- org.springframework.security.web.util.matcher.AntPathRequestMatcher

      它将MATCH_ALL 常量定义为/**,并且这个最终变量用于matches 方法。

      粘贴在来自org.springframework.security.web.util.matcher.AntPathRequestMatcher 的方法定义下方,它决定某些请求 url 是否匹配。如果模式设置为MATCH_ALL aka /**,则返回true

      public boolean matches(HttpServletRequest request) {
              if (this.httpMethod != null && StringUtils.hasText(request.getMethod())
                      && this.httpMethod != valueOf(request.getMethod())) {
                  if (logger.isDebugEnabled()) {
                      logger.debug("Request '" + request.getMethod() + " "
                              + getRequestPath(request) + "'" + " doesn't match '"
                              + this.httpMethod + " " + this.pattern + "'");
                  }
      
                  return false;
              }
      
              if (this.pattern.equals(MATCH_ALL)) {
                  if (logger.isDebugEnabled()) {
                      logger.debug("Request '" + getRequestPath(request)
                              + "' matched by universal pattern '/**'");
                  }
      
                  return true;
              }
      
              String url = getRequestPath(request);
      
              if (logger.isDebugEnabled()) {
                  logger.debug("Checking match of request : '" + url + "'; against '"
                          + this.pattern + "'");
              }
      
              return this.matcher.matches(url);
          }
      

      【讨论】:

        猜你喜欢
        • 2013-04-12
        • 2014-04-23
        • 2014-09-13
        • 1970-01-01
        • 2015-09-12
        • 2010-11-27
        • 2011-06-29
        • 1970-01-01
        • 2012-07-28
        相关资源
        最近更新 更多