Uknow's Lab.
article thumbnail

 

 

 

Filter가 두 번씩 호출되는 현상 발생...!

 

 

 

Jwt 로그인 흐름을 파악하기 위해 로그를 찍어 확인하던 중,

JwtAuthenticationFilter가 두 번씩 실행되던 현상을 발견하였습니다.

아직까지 이로 인해 일어난 문제는 없지만,

두 번씩 호출되는 건 절대 바람직한 현상이 아니기에 원인 추적에 나섰습니다.

 

@Slf4j
@Order(Ordered.HIGHEST_PRECEDENCE)
@RequiredArgsConstructor
@Component
public class JwtAuthenticationFilter extends GenericFilterBean {

    private final JwtTokenProvider jwtTokenProvider;

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        
        log.info("[JwtAuthenticationFilter] doFilter");

        // (중략)

        chain.doFilter(request, response);
    }

}

 

저의 경우, Filter에 @Component를 붙여주고,

SecurityConfig에서도 addFilterBefore로 Filter를 등록해줬기에

사실상 필터가 이중으로 등록된것이나 다름 없던 것이였죠.

 

 

 

OncePerRequestFilter

OncePerRequestFilter는 한 번만 실행되는 것을 보장하는 Filter입니다.

 

@Slf4j
@Order(Ordered.HIGHEST_PRECEDENCE)
@RequiredArgsConstructor
@Component
public class JwtAuthenticationFilter extends OncePerRequestFilter {

    private final JwtTokenProvider jwtTokenProvider;

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        log.info("[JwtAuthenticationFilter] doFilter 작동");
		
        // (중략)
		
        filterChain.doFilter(request, response);
    }

 

기존에 사용하던 GenericFilterBean 대신 OncePerRequestFilter를 사용하였습니다.

doFilter 대신 doFilterInternal 메서드를 오버라이딩 해줬습니다.

 

 

OncePerRequestFilter를 사용함으로써, 한 번씩만 호출이 되는 걸 확인할 수 있었습니다.

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.