Skip to content

[FIX] 인증이 필요없는 경로에도 JWT필터가 적용되던 문제 해결#257

Open
jnujh wants to merge 1 commit intodevelopfrom
fix/no-jwt-filter
Open

[FIX] 인증이 필요없는 경로에도 JWT필터가 적용되던 문제 해결#257
jnujh wants to merge 1 commit intodevelopfrom
fix/no-jwt-filter

Conversation

@jnujh
Copy link
Copy Markdown
Collaborator

@jnujh jnujh commented Nov 10, 2025

🚀 작업 내용

인증이 필요없는 GET api/clubs 같은 경로에도 JWT필터가 적용되어 401 응답이 던져지는 문제를 해결했습니다.
인증 및 인가가 필요한 경로를 명확하게 하고, 필요없는 경우는 필터가 적용되지 않도록 수정했습니다.
인증이 필요없는 경로는 shouldNotFilter 메소드를 오버라이드해서 제외하도록 했습니다.

⏱️ 소요 시간

1h 30m

🤔 고민했던 내용

필터 사이의 우선순위 및 왔다갔다(?) 를 명확하게 이해하지 못해 발생한 문제였습니다.
요청 -> JwtAuthenticationFilter의 doFilterInternal(인증) -> SecurityConfig의 filterChain의 authorizeHttpRequests(인가) -> 컨트롤러

💬 리뷰 중점사항

인증 및 인가가 필요없는 API 경로가 커버되지 않은게 있다면 말씀해주세요.

추가로 해당 작업 내용은 일반적인 사용자 흐름에서 발생하는 에러는 아닙니다.
저희가 서버를 껐다가 키는 경우 브라우저의 로컬스토리지에 액세스토큰이 남아있어서 생긴 문제였는데
(서버 재시작하면서 액세스토큰을 검증하는 키가 바뀌기 때문 등)
일반적인 사용자 흐름에서 로컬스토리지에 액세스토큰이 남아있는 경우는 쉽게 생기지 않을 거 같습니다.
하지만 아무래도 지금 평가기간이다 보니 해당 PR이 머지 되었을때 문제가 생길까봐 두렵긴하네요.
큰 작업 내용은 없어서 지장이 크진 않을 거 같은데 불안하시면 일단 읽어보시고 Merge는 평가 이후 진행해주셔도 좋습니다.

@jnujh jnujh requested review from gary5876 and ji-mim November 10, 2025 13:33
@jnujh jnujh self-assigned this Nov 10, 2025
@jnujh jnujh added the 🐛 bug 버그 이슈 label Nov 10, 2025
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Nov 10, 2025

📝 Walkthrough

개요

JwtAuthenticationFilter에 permitAllMatchers 기반의 사전 필터 스킵 메커니즘을 도입하여 인증 우회 경로를 중앙집중식으로 관리합니다. shouldNotFilter 메서드를 재정의하여 특정 경로에 대한 필터 로직 실행을 단축시킵니다.

변경사항

응집도 / 파일 변경 요약
JWT 필터 인증 우회 메커니즘
src/main/java/com/kakaotech/team18/backend_server/global/security/JwtAuthenticationFilter.java
permitAllMatchers 필드 추가 (AntPathRequestMatcher 리스트). shouldNotFilter(HttpServletRequest) 메서드 구현으로 API, Swagger, GET/POST 라우트에 대한 인증 필터 자동 스킵. 기존 하드코딩된 경로 우회 로직을 중앙집중식 matcher 기반 접근으로 대체.
필터 테스트 경로 업데이트
src/test/java/com/kakaotech/team18/backend_server/global/security/JwtAuthenticationFilterTest.java
세 개의 테스트에서 인증된 요청 대상 경로를 /api/clubs에서 /api/clubs/1/dashboard로 변경. 인증 필터 로직의 테스트 컨텍스트를 일반 엔드포인트에서 인증 필수 경로로 전환.

시퀀스 다이어그램

sequenceDiagram
    participant Client
    participant Filter as JwtAuthenticationFilter
    participant Matcher as permitAllMatchers
    participant Chain as FilterChain

    Client->>Filter: HTTP 요청
    Filter->>Filter: shouldNotFilter() 호출
    alt 요청이 permitAllMatchers 매치
        Filter->>Matcher: 경로 패턴 확인
        Matcher-->>Filter: true (우회 경로)
        Filter->>Chain: doFilter 스킵, 다음 필터로 진행
        Chain-->>Client: 응답 (인증 검사 없음)
    else 요청이 보호 경로
        Matcher-->>Filter: false (인증 필요)
        Filter->>Filter: JWT 토큰 검증
        alt 토큰 유효
            Filter->>Chain: 인증 정보 설정 후 진행
            Chain-->>Client: 응답 (성공)
        else 토큰 무효/만료
            Filter-->>Client: 401 Unauthorized
        end
    end
Loading

예상 코드 리뷰 소요 시간

🎯 2 (Simple) | ⏱️ ~12분

  • 검토 포인트:
    • permitAllMatchers 초기화에 포함된 경로 목록이 요구사항과 일치하는지 확인 필요
    • shouldNotFilter 메서드의 matcher 로직이 모든 우회 경로를 올바르게 처리하는지 검증
    • 테스트 경로 변경이 기존 필터 동작을 적절히 검증하는지 확인

🐰 필터의 길, 새로 나뉘네
우회 경로 모여 중앙에
shouldNotFilter의 영리한 판단
인증 없이 통과하는 길
보호된 곳은 여전히 튼튼하니
테스트도 새로운 여정을 따르리 ✨

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 33.33% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed PR 제목이 변경사항의 핵심을 명확하게 설명합니다. JWT 필터가 인증이 필요없는 경로에 적용되던 문제를 해결한다는 내용이 요약되어 있으며, 이는 코드 변경사항(permitAllMatchers를 통한 필터 스킵 메커니즘 추가)과 완벽하게 일치합니다.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/no-jwt-filter

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

🐛 bug 버그 이슈

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant