OncePerRequestFilter란?
매뉴얼에 기재되어 있다org.springframework.web.filter.OncePerRequestFilter
"요청당 한 번만 실행할 수 있는 대상"필터는 어떤 상황에서 요청당 두 번 이상 실행될 수 있습니까?
필터는 어떤 상황에서 요청당 두 번 이상 실행될 수 있습니까?
필터 체인에 필터를 여러 번 설치할 수 있습니다.
요청 디스패처를 사용하여 요청을 다른(또는 동일한) 서블릿으로 디스패치할 수 있습니다.
일반적인 사용 사례는 Spring Security에서 일반적으로 인증 및 액세스 제어 기능이 메인 애플리케이션 서블릿 앞에 있는 필터로 구현됩니다.요청 디스패처를 사용하여 요청을 디스패치할 경우 요청을 처리하는 서블릿에 도달하기 전에 필터 체인을 다시 통과해야 합니다(또는 다른 체인을 통과해야 합니다).문제는 일부 보안 필터 액션은 요청에 대해 한 번만 수행해야 한다는 것입니다.따라서 이 필터가 필요합니다.
OncePerRequestFilter의 역할을 이해하려면 먼저 일반 필터의 동작을 명확하게 이해해야 합니다.서블릿 실행 직전 또는 실행 후에 특정 코드를 실행할 경우 다음과 같은 기능을 하는 필터를 만듭니다.
code1 ===> servlet execution (using chain.doFilter()) ===> code2
따라서 code1은 servlet보다 먼저 실행되며 code2는 servlet 실행 후에 실행됩니다.그러나 여기서는 서블릿을 실행하는 동안 다른 서블릿에 대한 다른 요청이 있을 수 있으며 다른 서블릿에도 동일한 필터가 있습니다.이 경우 이 필터는 다시 실행됩니다.
OncePerRequestFilter는 이 동작을 방지합니다.이 필터는, 1개의 요구에 대해서, 1회만(이상) 실행됩니다.이 동작은 보안 인증을 사용할 때 매우 유용합니다.
Servlet 3.0 환경에서 사용하기 위해 특별한 종류의 Generic Filter Bean이 도입되었습니다.이 버전에서는 요청을 별도의 스레드로 처리할 수 있는 기능이 추가되었습니다.이 경우 여러 필터가 실행되지 않도록 Spring Web 프로젝트에서는 OncePerRequestFilter라는 특수한 종류의 필터를 정의합니다.GenericFilterBean을 직접 확장하고 이 클래스로 org.springframework.web.filter 패키지에 있습니다.OncePerRequestFilter는 doFilter 메서드를 정의합니다.내부에서 "${className}"을 검색하여 지정된 필터가 이미 적용되었는지 확인합니다.요청 파라미터의 true에 대응하는 FILTER" 속성.또한 추상 doFilter를 정의합니다.내부((HttpServletRequest 요구, HttpServletResponse, FilterChain filterChain) 메서드).필터가 적용되지 않은 경우 해당 구현에는 지정된 필터로 실행할 코드가 포함됩니다.
필터는 어떤 상황에서 요청당 두 번 이상 실행될 수 있습니까?
필터는 개별 스레드에서 발생하는 REQUEST 디스패치 또는 ASynC 디스패치의 일부로 호출할 수 있습니다.주요 사용자 또는 인증된 사용자를 취득하기 위해 데이터베이스 콜을 실행하므로 OncePerRequestFilter를 사용해야 합니다.여러 번 실행해도 의미가 없습니다.그 후 보안 컨텍스트에 주체를 설정합니다.
Authentication auth = jwtTokenProvider.getAuthentication(token);
SecurityContextHolder.getContext().setAuthentication(auth);
여기서 jwtTokenProvider는 jwt 토큰에서 인증을 받기 위한 서비스입니다.
OncePerRequestFilter는 필터의 doFilter() 메서드가 요청당 한 번만 실행되도록 로직을 구현합니다.
언급URL : https://stackoverflow.com/questions/13152946/what-is-onceperrequestfilter
'programing' 카테고리의 다른 글
angular.json으로 구성을 확장하는 방법이 있습니까? (0) | 2023.03.25 |
---|---|
ngResource에 비해 Resangular를 사용하는 이점은 무엇입니까? (0) | 2023.03.25 |
react-redux-v6:withRef가 삭제됩니다.래핑된 인스턴스에 액세스하려면 연결된 구성 요소의 참조를 사용하십시오. (0) | 2023.03.25 |
React.js에서 하위 렌더링 트리거 (0) | 2023.03.25 |
[( ! defined ( " ABSPATH " ) ]는 무엇을 의미합니까? (0) | 2023.03.25 |