实现方式
第一种方式
继承自 OncePerRequestFilter
并标记 @Component
组件
@Component
public class MyFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("Filter: MyFilter 执行之前");
chain.doFilter(request, response);
System.out.println("Filter: MyFilter 执行之后");
}
}
第二种方式
@Configuration
public class FilterConfig {
@Bean
public FilterRegistrationBean filterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
System.out.println("Filter: filterRegistration 执行 执行之前");
chain.doFilter(request, response);
System.out.println("Filter: filterRegistration 执行 执行之后");
}
});
registration.addUrlPatterns("/*");
registration.addInitParameter("paramName", "paramValue");
registration.setName("filterRegistration");
registration.setOrder(Integer.MIN_VALUE);
return registration;
}
}
这种方式可以对 Filter
做更详细的设置,如拦截的url、初始化参数、拦截器order
用途
拦截请求,可以对请求做「权限验证」,比如验证码校验。
github地址: https://github.com/jkxyx205/spring-boot-learn/tree/master/spring-mvc-filter