Spring Bean 주석으로 필터가 두 번 등록됨
필터를 Spring Bean으로 등록할 때 다중 호출 가능성을 고려하는 것이 중요합니다. . 특정 시나리오에서는 다음 문제에서 관찰된 것처럼 필터가 두 번 트리거될 수 있습니다.
문제:
사용자가 Spring의 GenericFilterBean을 확장하는 필터 A를 정의합니다. . 이 필터가 Spring Security 구성에서 Bean으로 등록되면 추가 호출이 관찰되어 다음과 같은 출력이 발생합니다.
filter A before filter A before mycontroller invoke filter A after filter A after
쿼리:
왜 필터가 두 번 호출되고 있으며 이 문제는 어떻게 해결될 수 있습니까? 해결되었습니까?
답변:
Spring Boot가 필터 유형의 모든 Bean을 서블릿 컨테이너에 자동으로 등록하기 때문에 추가 호출이 발생합니다. 이를 방지하려면 두 가지 옵션이 있습니다.
옵션 1: Spring Security에만 필터 등록
필터를 Bean으로 노출하지 않고 Spring Security에만 등록 , 다음과 같습니다.
@Override protected void configure(HttpSecurity http) throws Exception { http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); http.addFilterBefore(new A(), BasicAuthenticationFilter.class); http.csrf().disable(); }
옵션 2: 다음과 함께 FilterRegistrationBean 사용 주석
필터에 종속성을 자동 연결해야 하는 경우 이를 Bean으로 등록할 수 있지만 FilterRegistrationBean을 사용하여 서블릿 컨테이너에 자동 등록을 비활성화할 수 있습니다.
@Bean public FilterRegistrationBean registration(MyFilter filter) { FilterRegistrationBean<MyFilter> registration = new FilterRegistrationBean<MyFilter>(filter); registration.setEnabled(false); return registration; }
위 내용은 스프링 필터가 두 번 호출되는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!