프레임워크/Spring
[Spring] Filter가 두 번씩 실행되던 현상
유노 Uknow
2024. 3. 19. 21:13
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를 사용함으로써, 한 번씩만 호출이 되는 걸 확인할 수 있었습니다.