自定义好了过滤器当然要使其在Spring Boot中生效了,该如何配置呢?
1、配置类中使用@Bean注入【推荐使用】
其实很简单,只需要将 FilterRegistrationBean 这个实例注入到IOC容器中即可,如下:
@Configuration
public class FilterConfig {
@Autowired
private Filter1 filter1;
@Autowired
private Filter2 filter2;
/**
* 注入Filter1
* @return
*/
@Bean
public FilterRegistrationBean filter1() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter1);
registration.addUrlPatterns("/*");
registration.setName("filter1");
//设置优先级别
registration.setOrder(1);
return registration;
}
/**
* 注入Filter2
* @return
*/
@Bean
public FilterRegistrationBean filter2() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter2);
registration.addUrlPatterns("/*");
registration.setName("filter2");
//设置优先级别
registration.setOrder(2);
return registration;
}
}
注意:设置的优先级别决定了过滤器的执行顺序。
2、使用@WebFilter
@WebFilter 是Servlet3.0的一个注解,用于标注一个Filter,Spring Boot也是支持这种方式,只需要在
自定义的Filter上标注该注解即可,如下:
@WebFilter(filterName = "crosFilter",urlPatterns = {"/*"})
public class CrosFilter implements Filter {
//重写其中的doFilter方法
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws
IOException, ServletException {
//继续执行下一个过滤器
chain.doFilter(req, response);
}
}
要想 @WebFilter 注解生效,需要在配置类上标注另外一个注解 @ServletComponentScan 用于扫描使其生
效,如下:
```java
@SpringBootApplication
@ServletComponentScan(value = {"com.example.springbootintercept.filter"})
public class SpringbootApplication {}
至此,配置就完成了,启动项目,即可正常运行。
```
自定义配置类加载自定义过滤器 ,确保 WebConfig 类能被扫描到就可以了,然后启动springboot 访问你的接口就会看到打印过滤器里的内容了。
请参考:https://blog.csdn.net/weixin_42029738/article/details/127718063
在Spring Boot中配置Filter需要在启动类中使用@Bean注解将自定义Filter注册到FilterRegistrationBean中,然后配置Filter的映射路径。例如:
@Bean
public FilterRegistrationBean<MyFilter> filterRegistrationBean() {
FilterRegistrationBean<MyFilter> registrationBean = new FilterRegistrationBean<>();
registrationBean.setFilter(new MyFilter());
registrationBean.addUrlPatterns("/api/*");
return registrationBean;
}
这样就可以实现自定义Filter在Spring Boot中生效了。