Conversation
📝 WalkthroughWalkthrough이 변경사항은 인증 및 권한 부여, JWT 토큰 검증, 역할 관리, 그리고 일부 API 엔드포인트 경로에 대한 리팩토링을 포함합니다. 보안 설정이 세분화되고, JWT 필터와 Redis 유틸리티가 토큰 재발급 및 검증 로직을 개선하며, 역할 Enum 구조가 변경되었습니다. Changes
Sequence Diagram(s)sequenceDiagram
participant Client
participant JwtFilter as JwtAuthenticationFilter
participant RedisUtil as RedisTokenUtil
participant SecurityContext
Client->>JwtFilter: 요청 전송 (Access/Refresh 토큰 포함)
JwtFilter->>JwtFilter: Access 토큰 검증 시도
alt Access 토큰 유효
JwtFilter->>SecurityContext: 인증 정보 설정
JwtFilter->>Client: 요청 처리 계속
else Access 토큰 만료/실패
JwtFilter->>JwtFilter: Refresh 토큰 검증 시도
alt Refresh 토큰 유효
JwtFilter->>RedisUtil: 토큰 재발급 및 응답 헤더 설정
JwtFilter->>SecurityContext: 인증 정보 설정
JwtFilter->>Client: 요청 처리 계속
else Refresh 토큰도 실패
JwtFilter->>Client: 인증 정보 없이 요청 처리
end
end
Possibly related PRs
✨ Finishing Touches
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. 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
SupportNeed help? Create a ticket on our support page for assistance with any issues or questions. Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
Documentation and Community
|
There was a problem hiding this comment.
Actionable comments posted: 6
🔭 Outside diff range comments (3)
src/main/java/com/pitchain/common/collector/RoleRequestCollector.java (1)
33-33: 프로덕션 코드에서 디버깅 출력문을 제거해주세요.빈
System.out.println()문은 디버깅 목적으로 보이며, 프로덕션 코드에는 포함되어서는 안 됩니다.- System.out.println();src/main/java/com/pitchain/common/redis/RedisTokenUtil.java (2)
67-67: Refresh 토큰 만료 시간 설정 오류
issueRefreshToken메서드에서accessTokenExpirationPeriod를 사용하고 있습니다. 이는refreshTokenExpirationPeriod를 사용해야 합니다.- .withExpiresAt(new Date(System.currentTimeMillis() + accessTokenExpirationPeriod)) + .withExpiresAt(new Date(System.currentTimeMillis() + refreshTokenExpirationPeriod))
77-77: Refresh 토큰 만료 시간 설정 오류 (테스트용 메서드)
issueRefreshTokenWithoutExpiration메서드도 동일한 문제가 있습니다. 메서드명과 주석(3시간)이 일치하지 않으며, 하드코딩된 값을 사용하고 있습니다.이 테스트용 메서드의 목적과 사용처를 재검토하고, 필요하다면 명확한 상수를 사용하거나 메서드명을 변경하는 것을 권장합니다.
📜 Review details
Configuration used: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (6)
src/main/java/com/pitchain/common/collector/RoleRequestCollector.java(1 hunks)src/main/java/com/pitchain/common/config/SecurityConfig.java(4 hunks)src/main/java/com/pitchain/common/constant/MemberRole.java(2 hunks)src/main/java/com/pitchain/common/filter/JwtAuthenticationFilter.java(2 hunks)src/main/java/com/pitchain/common/redis/RedisTokenUtil.java(2 hunks)src/main/java/com/pitchain/investment/presentation/InvestmentController.java(1 hunks)
🔇 Additional comments (7)
src/main/java/com/pitchain/common/collector/RoleRequestCollector.java (1)
39-39: @RequiredRole 어노테이션 탐색 방식 변경 검토 결과
직접@RequiredRole을 메타 어노테이션으로 사용한 정의가 없고, 상속(inherited)되어 사용되는 케이스도 확인되지 않았습니다. 따라서AnnotatedElementUtils.findMergedAnnotation에서getAnnotation으로 변경해도 문제 없습니다.src/main/java/com/pitchain/investment/presentation/InvestmentController.java (1)
30-30: API 경로가 단수형에서 복수형으로 변경되었습니다.RESTful 규칙에 따라 복수형을 사용하는 것이 좋은 변경사항입니다. 이제 POST와 GET 엔드포인트가 동일한 경로를 사용하여 일관성이 향상되었습니다.
다만, 이 변경사항이 기존 클라이언트에 영향을 줄 수 있으므로 클라이언트 업데이트가 필요한지 확인해주세요.
src/main/java/com/pitchain/common/redis/RedisTokenUtil.java (2)
129-138: 토큰 재발급 메서드 구현이 적절합니다.새로운 access token과 refresh token을 발급하여 응답 헤더에 설정하는 로직이 명확하게 구현되었습니다.
122-127: 예외 처리 확인 완료
getClaim메서드에서 던지는JWTVerificationException은 다음과 같이 적절히 처리되고 있습니다:
- JwtAuthenticationFilter#doFilterInternal:
- Access 토큰 검증 실패 시 예외를 캐치하여 refresh 흐름 진입
- Refresh 토큰 검증 실패 시 필터 체인으로 정상 요청 흐름 복귀
- 컨트롤러 레이어:
GlobalExceptionHandler의@ExceptionHandler(JWTVerificationException.class)에서 전역 처리따라서 추가적인 try-catch 블록 삽입 없이도 예외가 안전하게 핸들링되므로 별도 조치는 필요하지 않습니다.
src/main/java/com/pitchain/common/constant/MemberRole.java (1)
15-50: 역할 관리 구조 개선
String[]에서EnumSet<RoleType>으로의 리팩토링은 다음과 같은 장점이 있습니다:
- 타입 안전성 향상
- 컴파일 시점 오류 검출 가능
- EnumSet의 효율적인 메모리 사용과 빠른 연산
구현이 깔끔하고 기존 API와의 호환성도 잘 유지되었습니다.
src/main/java/com/pitchain/common/config/SecurityConfig.java (2)
71-89: 보안 설정 화이트리스트 구조 개선화이트리스트를 목적별로 분리한 것은 좋은 개선사항입니다:
- Swagger UI 관련 경로
- 정적 리소스 경로
- 공개 API 엔드포인트
이렇게 분리하면 각 카테고리별로 권한을 다르게 설정하거나 관리하기 용이합니다.
105-119: 커스텀 예외 핸들러 구현인증 실패와 권한 부족에 대한 커스텀 핸들러가 잘 구현되었습니다. 사용자 친화적인 한글 메시지를 제공하는 것도 좋습니다.
⭐ Summary
📌 Tasks