美文网首页springbootJava学习笔记SpringFramework
Spring Boot:取消Filter自动注册

Spring Boot:取消Filter自动注册

作者: tkec | 来源:发表于2016-07-08 11:19 被阅读2624次
    Spring Boot针对Servlet、Filter等,有几种注册方法
    1. 使用@WebFilter@WebServlet@WebListener注解来标识类
    2. 使用FilterRegistrationBeanServletRegistrationBean来对FilterServlet进行自定义注册
    3. 使用@Bean来自动添加,添加后默认的过滤路径为 /*

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

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

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

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

    怎么取消Filter自动注册?

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

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

    参考资料:
    Spring Boot Document

    相关文章

      网友评论

        本文标题:Spring Boot:取消Filter自动注册

        本文链接:https://www.haomeiwen.com/subject/mvaljttx.html