OncePerRequestFilter 은 Request 요청 마다 실행되는가 ?

XingXi·2024년 6월 27일
0

기록

목록 보기
30/33
@RequiredArgsConstructor
@Slf4j
public class JwtFilter extends OncePerRequestFilter {

    private final JwtHandler handler;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        String jwt = resolveTkn(request);
        String uri = request.getRequestURI();

        log.info("요청 URL : {}",uri);

        if(hasText(jwt))
        {
            Authentication authentication = handler.getAuthentication(jwt);
            // ** 멀티 스레딩 환경에서 다음 과 같이 사용하면 race condition 을 방지하기 힘들기에 SecurityContext 를 새로 만드는 것이 좋다.
            // SecurityContextHolder.getContext().setAuthentication(authentication);
            SecurityContext context = SecurityContextHolder.createEmptyContext();
            context.setAuthentication(authentication);
        }

jwt를 적용하는 필터를 만들때 항상 OncePerRequestFilter 를 상속받아서 만드는데
클래스 이름만 봐서는 요청 하나당 한번만 실행되는 필터인가 싶다.

OncePerRequestFilter

지만 이상하다. 요청한번에 필터를 여러번 거칠 일이 있나?
생각해보면 Forwarding 하는 경우가 있기 때문에
해당 필터를 사용하는 것이다.

특이 이것을 인증/인가와 관련된 로직에 추가 하는 것은
이미 인증된 정보를 한번더 확인하고 지정하는데 드는 비용적인 문제가 크지만
처리과정에서 문제가 발생할 수 있기에 이를 방지하기 위해서 사용한다.

0개의 댓글