1.创建一个 Filter 类,实现 Filter 接口
public class HelloFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//处理业务逻辑
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
}
}
2. 创建一个配置类,将该过滤器注册到Web拦截器中
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Bean
public FilterRegistrationBean filterRegistrationBean(){
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
//将自定义的 HelloFilter注册到Web应用的Filter中 使其生效
registrationBean.setFilter(new HelloFilter());
//声明该 HelloFilter 作用在哪些url上
List<String> urlList = new ArrayList<>();
//作用于所有url
urlList.add("/*");
registrationBean.setUrlPatterns(urlList);
return registrationBean;
}
}
扩展:
Filter(过滤器) Interceptor(拦截器)Aspect(切片)比较:
- Filter 是 java web 里面的,肯定获取不到 spring 里面 Controller 的信息。
- Interceptor、Aspect 是和 spring 相关的,所以能获取到 Controller 的信息。
- Interceotor获取不到请求方法中的参数信息 Aspect(切片)可以获取到