Servlet过滤所有请求

时间:2011-10-31 04:02:52

标签: java servlets servlet-filters

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

4 个答案:

答案 0 :(得分:17)

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

e.g。

    <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>

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

请参阅- org.springframework.security.web.util.matcher.AntPathRequestMatcher

它将MATCH_ALL常量定义为/**,并且此最终变量用在matches方法中。

org.springframework.security.web.util.matcher.AntPathRequestMatcher的方法定义下面粘贴,它确定某些请求url是否匹配。如果模式设置为MATCH_ALL/**,则返回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);
    }

答案 3 :(得分:-1)

您确定请求正在命中控制器/ Servlet吗?如果正在拨打Ajax电话或运行一些JS,则过滤器将无法运行。