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를 사용함으로써, 한 번씩만 호출이 되는 걸 확인할 수 있었습니다.
'프레임워크 > Spring' 카테고리의 다른 글
AWS Lightsail로 Spring 웹사이트 배포하기 (0) | 2023.08.20 |
---|---|
[Spring] java.sql.SQLException: Field 'id' doesn't have a default value 에러 (1) | 2023.06.11 |
스프링으로 우당탕탕 게시판 만들기 1 - CRUD (+MySQL) (5) | 2023.05.08 |