Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: 토큰 생성 로직 수정 #46

Merged
merged 3 commits into from
Feb 7, 2025
Merged

fix: 토큰 생성 로직 수정 #46

merged 3 commits into from
Feb 7, 2025

Conversation

boyekim
Copy link
Member

@boyekim boyekim commented Feb 7, 2025

작업 내용

문제 상황

실제 배포 환경에서는 토큰이 생성되어 헤더에 발급되지 않는 문제가 발생했습니다.
이를 검증하는 기존 테스트는 여전히 통과하고 있었으나, 로컬에서 실행하여 포스트맨 요청을 보냈을 때에도 토큰은 발급되지 않았습니다.
기존 로직은 다음과 같습니다.

  1. 들어오는 모든 요청을 인터셉터하여 헤더를 확인한다.(@Prehandle)
  2. 토큰이 존재하지 않는다면 토큰을 발급 후 응답 헤더에 토큰을 전해준다. (@PostHandle)

하지만 이때에 응답 헤더에 토큰이 전해지지 않았고, 디버깅한 결과 요청 헤더에 토큰이 존재하지 않는 것은 정상적으로 인터셉터 되는 것으로 확인되었습니다.
PostHandle도 정상적으로 실행되나, 내부의 isCommit()에 걸려 응답이 수정되지 않았습니다. 해당 메서드에 대해서 아직 파악된 것은 많이 없지만, @PostHandle에서는 HttpServletResponse의 헤더를 수정할 수 없다는 것으로 생각되어요....

해결 방법

따라서 @PreHandle에서 response에 토큰을 추가하는 로직까지 추가해 주었습니다.

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        if (hasNoToken(request)) {
            ThreadLocalHolder.SHARED_TOKEN.set(TokenProvider.create());
            response.addCookie(new Cookie(TOKEN_KEY, ThreadLocalHolder.SHARED_TOKEN.get()));
            return true;
        }
        ThreadLocalHolder.SHARED_TOKEN.set(findTokenFromCookie(request));
        return true;
    }

따라서 @PostHandle 메서드는 삭제되었으며,
현재 테스트도 실제 서블릿 컨테이너의 동작을 검증하는 역할을 하지 못하기 때문에 테스트로서의 역할을 하지 못한다고 판단, 삭제하게 되었습니다.
실제 서블릿 컨테이너의 동작을 검증하고 싶어서 기존의 mockMvc가 아닌 RestAssured를 시도하였으나 똑같이 실패해야하는 토큰 생성 테스트가 성공하였고, TestRestTemplate, RestTemplate의 사용도 전부 의도와 다르게 동작(실패해야 하는 테스트가 성공)하였기 때문에... 이부분은 이슈로 등록 후 해결해보아요

고민 지점과 리뷰 포인트

테스트에 대해 아는 것이 있거나 알아본 것이 있다면 공유해주세요!!ㅜㅜ
제가 시도할 것을 공유하자면 테스트에 관련하여 isCommit() 지점에 디버깅을 건 후 테스트를 실행시키며 테스트 디버깅을 해보겠습니다..😭

+) 추가로, 기존의 코드와 테스트는 protect/token-generate-test 브랜치를 생성하여 기록해두었습니다~!

@boyekim boyekim linked an issue Feb 7, 2025 that may be closed by this pull request
Copy link

github-actions bot commented Feb 7, 2025

Test Results

44 tests   44 ✅  5s ⏱️
15 suites   0 💤
15 files     0 ❌

Results for commit b1c0301.

♻️ This comment has been updated with latest results.

Copy link
Member

@3Juhwan 3Juhwan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨습니다 😀
이제 토큰이 정상 동작하겠어요.

src/main/java/kr/allcll/seatfinder/AuthInterceptor.java Outdated Show resolved Hide resolved
@3Juhwan 3Juhwan merged commit 20965e9 into main Feb 7, 2025
3 checks passed
@3Juhwan 3Juhwan deleted the fix/45-token-generate branch February 7, 2025 04:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

토큰이 발급되지 않는 오류를 해결한다.
2 participants