Spring Boot:取消Filter自动注册

Spring Boot针对Servlet、Filter等,有几种注册方法

  1. 使用@WebFilter、@WebServlet、@WebListener注解来标识类
  2. 使用FilterRegistrationBean、ServletRegistrationBean来对Filter、Servlet进行自定义注册
  3. 使用@Bean来自动添加,添加后默认的过滤路径为 /*

对于一般场景,使用第三种方式是最简单的,不过如果有特殊的定制需求,那么就不能满足了。

在Spring Boot中使用Security,提供了自定义的Filter来进行权限控制,同时,希望该自定义Filter能作为Spring Bean,以便获得Spring Bean的相关益处,比如可以使用@Autowired进行Bean的注入等。

@Bean
public MyFilter getMyFilter() {    
    return new MyFilter();
}

但这里遇到了一个问题,自定义Filter通过@Bean注解后,被Spring Boot自动注册到了容器的Filter chain中,这样导致的结果是,所有URL都会被自定义Filter过滤,而不是Security中配置的一部分URL。

怎么取消Filter自动注册?

Spring Boot对FilterServlet提供了相应的注册类,来进行精细化的配置,我们可以使用注册类来取消Filter的自动注册。
通过使用FilterRegistrationBean来进行Filter的注册,同时,设置enabled为false,就可以取消Filter的自动注册行为了。

@Bean
public FilterRegistrationBean cancelMyFilterRegistration(MyFilter filter) {  
    FilterRegistrationBean registration = new FilterRegistrationBean(filter); 
    registration.setEnabled(false); 
    return registration;
}

 

你可能感兴趣的:(spring,security,spring,boot,spring,boot,filter)