Spring Boot Filter自动注册

https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-add-a-servlet-filter-or-listener-as-spring-bean

根据SpringBoot文档,SpringBoot针对Servlet,Filter,Listener可以使用@Bean来进行自动注册。

To add a Servlet, Filter, or Servlet *Listener by using a Spring bean, you must provide a @Bean definition for it. Doing so can be very useful when you want to inject configuration or dependencies.
例如

    @Bean(name = "devCryptoFilter")
    public DevCryptoFilter devCryptoFilter() {
        return new DevCryptoFilter();
    }

这样这个Filter已经被注入成一个Filter了。

但是在一些特定的场景会有一些特定的需求,我们可能需要自己实现注册,但是又需要Filter实例存在于Spring容器中,以便让其使用到Spring提供的众多服务(自动注入其他组件……)。所以需要取消Spring Boot的自动注入Filter。

    @Bean
    public FilterRegistrationBean registration(@Qualifier("devCryptoFilter") DevCryptoFilter filter) {
        FilterRegistrationBean registration = new FilterRegistrationBean(filter);
        registration.setEnabled(false);
        return registration;
    }

这样我们的实例就可以手动注册

    @Bean
    public FilterRegistrationBean someFilterRegistration() {
        FilterRegistrationBean registration = new FilterRegistrationBean();
        DelegatingFilterProxy delegatingFilterProxy = new DelegatingFilterProxy();
        delegatingFilterProxy.setTargetBeanName("devCryptoFilter");
        registration.setFilter(delegatingFilterProxy);
        registration.addUrlPatterns("/v1.1/mobile/dispatch.do");
        registration.addUrlPatterns("/v1.1/desktop4pc/dispatch.do");
        registration.setDispatcherTypes(DispatcherType.REQUEST, DispatcherType.FORWARD);
        registration.setName("encryptionFilter");
        return registration;
    }

你可能感兴趣的:(Spring Boot Filter自动注册)