Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
Tags
- 현대자동차코테후기
- useSSL
- Public Key Retrieval is not allowed
- log4j version up
- TestCase
- ecs layout
- r2dbc pool
- mockbean
- $partitions
- 유방암보호자
- OncePerRequestFilter
- 유방암
- Trino
- allowPublicKeyRetrieval
- R2DBC
- 좋은개발
- Microservice
- 멀티모듈
- 유방암일기
- 내가보려고한
- spybean
- jdbc 연동오류
- java
- show partition
- Infrastructure as Code
- retrieval
- 현대자동차코테
- 유방암보호자일기
- trino jdbc
- MultiModule
Archives
- Today
- Total
우당탕 개발일지
OncePerRequestFilter 와 Filter 의 차이 본문
Spring 을 사용하는 개발자라면 익히 Filter 에 대해서 들었을 것입니다.
Filter 는 jakarta.servlet 에서 제공되는 인터페이스로 서블릿 컨테이너에서 Http 요청을 인터셉트 하여 필터 체인을 통해 인증, 로깅, 압축 보안 등의 공통 작업을 처리하여 서비스의 보안을 높여주는 기능을 수행합니다.
그런데 이런 Filter 가 중복으로 호출 되는 경우가 있습니다.
- 여러개의 Filter 가 동일한 Url 패턴으로 등록되어 있고 모두 filter chain 이 포함되어 있는 경우 filter 가 순서대로 호출되어 중복 호출이 발생하는 경우
- forwarding : forwarding 은 현재의 요청을 다른 servlet 이나 jsp 로 전달을 하게 되는데 이 때 요청/응답에 대해 동일한 작업을 수행하여 중복호출이 발생. 이 말이 좀 어려운데 dispatcher servlet 이 요청을 받아 controller 까지 결과를 생성한 후 forward method 를 사용해서 다른 서블릿으로 결과를 전달하는 경우가 있습니다. 이 말은 결국 forwarding 을 통해 이전에 전달한 요청을 다시 한번 filter 에 보내 중복으로 처리한다는 의미입니다.
이런 동일한 필터가 여러번 호출되는 경우를 방지하기 위해서 사용하는 것이 OncePerRequestFilter 입니다.
OncePerRequestFilter 는 Spring 에서 전달한 요청을 한번만 실행되도록 보장해줍니다.
@Component
@RequiredArgsConstructor
public class CustomWebFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(
HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
System.out.println("--- CustomWebFilter START ---");
filterChain.doFilter(request, response);
System.out.println("--- CustomWebFilter END ---");
}
}
동기 요청에 대해서는 doFilterInternal method 를 오버라이드 해서 사용할 수 있지만 비동기 요청에 대해서는 기본적으로 제공되지 않기 때문에 내부에 있는 shouldNotFilterAsyncDispatch , shouldNotFilterErrorDispatch 를 재정의 해서 사용해야 합니다.
[OncePerRequestFilter 내용 중 shouldNotFilterAsyncDispatch , shouldNotFilterErrorDispatch method]
참고 Url : https://www.baeldung.com/spring-onceperrequestfilter