Adding a custom filter to be invoked after spring-security filter in a Servlet 3+ environment

前端 未结 3 1893
[愿得一人]
[愿得一人] 2021-01-18 16:35

I\'m using Spring-Security 3.2.4 and Spring Boot 1.1.0 (and it\'s related dependencies versions 4.X). I\'m writing a web application that will be run in an embedded tomcat.<

3条回答
  •  情书的邮戳
    2021-01-18 17:14

    Agree with everything stated by Dave Syer ;) but wished to add a Java Config example of using the FilterRegistrationBean.

    In my situation, I was finding that my custom security filter (using Spring Security) was being fired twice for every request. Adding the FilterRegistrationBean config fixed this.

        @Bean(name = "myFilter")
        public MyAuthenticationFilter myAuthenticationFilter(final MyAuthenticationEntryPoint entryPoint) {
            final MyAuthenticationFilter filter = new MyAuthenticationFilter();
            filter.setEntryPoint(entryPoint);
            return filter;
        }
    
        /**
         *  We do this to ensure our Filter is only loaded once into Application Context
         *
         */
        @Bean(name = "authenticationFilterRegistration")
        public FilterRegistrationBean myAuthenticationFilterRegistration(final MyAuthenticationFilter filter) {
            final FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
            filterRegistrationBean.setFilter(filter);
            filterRegistrationBean.setEnabled(false);
            return filterRegistrationBean;
        }
    

    (Regarding my specific issue of filter being registered twice in Application Context - Rather than using a FilterRegistrationBean, I also found re-implementing the MyAuthenticationFilter to inherit from OncePerRequestFilter instead of GenericFilterBean also worked. However, OncePerRequestFilter support is from Servlet 3.x upwards and since I was writing a public library, support from Servlet 2.x may be needed)

提交回复
热议问题