> Java > java지도 시간 > 스프링 필터가 두 번 호출되는 이유는 무엇이며 어떻게 해결할 수 있습니까?

스프링 필터가 두 번 호출되는 이유는 무엇이며 어떻게 해결할 수 있습니까?

Mary-Kate Olsen
풀어 주다: 2024-12-09 03:00:15
원래의
961명이 탐색했습니다.

Why is My Spring Filter Being Invoked Twice, and How Can I Fix It?

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿