[버그 리포트] access token 재발급 무한 요청 문제

 

문제 상황

익명 메시지 프로젝트를 진행하는 과정에 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. 항상 의심하고 또 의심하자는 마인드를 가지기

내가 짠 코드에 대해서 다방면으로 생각하고 의심하는 습관을 들여야겠다고 다시 한번 느꼈다. 코드를 짤 때 로직에 대해서 먼저 생각하고 코드를 짜긴 하지만, 내가 생각하지 못한 놓친 부분이 있을 수 있다는 것을 마음속에 새겨야겠다. 그래야 이런 상황이 다시 발생하지 않을 것 같다.