我想知道,如何在web.xml中设置每个请求都会调用的过滤器?
答案 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,则过滤器将无法运行。