一、在初始化配置时指定Filter
1.假设自定义一个LoggingFilter,它必须实现Filter接口。
public class LoggingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("进入了init方法...(初始化的时候进入init方法...)");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("进入了doFilter方法...(发起url请求的时候进入doFilter方法...)");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
2.要让上面的LoggingFilter生效,还需要注册Filter。在spring初始化配置信息的时候,将LoggingFilter进行注册。
@Configuration
public class Configure {
public Configure() {
init();
}
private void init() {
System.out.println("初始化Configure类...");
}
@Bean
public FilterRegistrationBean registLog1() {
FilterRegistrationBean loggingFilter = new FilterRegistrationBean(new LoggingFilter());
loggingFilter.addUrlPatterns("/*");//过滤条件
loggingFilter.setName("LoggingFilter");//filter名称
loggingFilter.setOrder(5);//存在多个filter时,控制加载顺序
return loggingFilter;
}
}
spring启动加载配置信息时,会将FilterRegistrationBean加载到容器中,并且我自定义的LoggingFilter也会跟着注入到FilterRegistrationBean实例中,这样就完成了LoggingFilter的注册。
二、采用@WebFilter配置Filter
1.仍然自定义一个LoggingFilter,并且实现Filter接口。
@Component //标记为组件,表示该类交给spring容器管理
//@ServletComponentScan
@WebFilter(filterName = "LoggingFilter", urlPatterns={"/*"}) //配置Filter信息
public class LoggingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("进入了init方法...(初始化的时候进入init方法...)");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("进入了doFilter方法...(发起url请求的时候进入doFilter方法...)");
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
这种方法同样达到了效果,并且配置方式更为简单。需要注意的是:
@WebFilter(filterName = "LoggingFilter", urlPatterns={"/*"})
就好比原先web.xml里配置为:
<filter>
<filter-name>LoggingFilter</filter-name>
<filter-class>com.ft.filter.LoggingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoggingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>