문제 상황
익명 메시지 프로젝트를 진행하는 과정에 access token 재발급 요청이 수십 건 들어오는 문제가 발생
원인
코드를 다시 확인해 보니 아래 1~3번 과정이 계속 반복되며 무한 요청 문제가 발생하고 있었다.
1. 서버의 Filter에서 access token을 재발급하라고 return 시킴.
2. 클라이언트는 access token 재발급 요청을 서버에게 보냄.
3. 서버는 토큰이 만료됐다고 다시 return 시킴.
해결
재발급 요청 URI 인 경우 Filter에서 리턴 시키지 않고 통과시키는 방식으로 해결!!
Filter에 아래 코드를 추가하여 문제 해결
// 건너뛸 URI
private final List<String> excludedUris = Arrays.asList("/api/v1/auth/users/access-token");
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
// 재발급 URI인 경우
if (skipFilterForUri(request)) {
filterChain.doFilter(request, response);
return;
}
}
// Filter 그냥 통과할 uri인지 확인
private boolean skipFilterForUri(HttpServletRequest request) {
String requestURI = request.getRequestURI();
return excludedUris.stream().anyMatch(requestURI::equals);
}
느낀 점
1. 항상 의심하고 또 의심하자는 마인드를 가지기
내가 짠 코드에 대해서 다방면으로 생각하고 의심하는 습관을 들여야겠다고 다시 한번 느꼈다. 코드를 짤 때 로직에 대해서 먼저 생각하고 코드를 짜긴 하지만, 내가 생각하지 못한 놓친 부분이 있을 수 있다는 것을 마음속에 새겨야겠다. 그래야 이런 상황이 다시 발생하지 않을 것 같다.
'버그리포트' 카테고리의 다른 글
[버그 리포트] SonarQube - 인증 코드(비밀번호) 생성 시 Random 말고 SecureRandom을 쓰자! (0) | 2024.05.07 |
---|---|
[SonarQube 06] JUnit 5에서는 Test class에 접근제한자 붙이지 말기 (0) | 2023.04.27 |
[SonarQube 05] 길이가 늘어나는 문자열은 String 대신 StringBuilder를 쓰자. (0) | 2023.03.26 |
[SonarQube 02] "Random" objects should be reued (0) | 2023.03.25 |