1. 기존 구조 분석
기존의 인증 처리 방식
- 이전에는 JWT를 기반으로 인증을 처리하는 커스텀 필터(
JwtFilter, JwtAuthenticationFilter)를 사용했습니다.
- 주요 기능:
- JWT 추출 및 유효성 검사
- 인증된 유저 정보 세팅
- 권한 관리 및 예외 처리
문제점:
- Spring Security를 활용한 관리가 아니어서 보안 및 권한 관리를 더 효율적으로 하기 위해 Spring Security로 전환할 필요가 있었습니다.
2. Spring Security로 전환 이유
- 권한 관리: Spring Security는 이미 강력한 권한 관리 기능을 제공하고 있어, 별도의 커스텀 권한 관리보다 통합 관리가 가능해집니다.
- 유지보수성: Spring Security는 커스터마이징이 용이하고, 다양한 보안 기능을 기본으로 제공하므로, 향후 보안 관련 요구 사항 변경에 유연하게 대응할 수 있습니다.
- 표준화: Spring Security는 이미 많은 개발자들에 의해 사용되고 검증된 표준 솔루션이기 때문에, 코드의 안정성과 신뢰성을 높이는 데 유리합니다.
3. JWT 인증 처리 방식 설계
JWT 필터 설계
- JWT 추출:
Authorization 헤더에서 JWT 토큰을 추출합니다.
bearerToken이 없거나 형식이 잘못되었을 경우에는 필터를 계속 진행하게 두었습니다.
- JWT 유효성 검사:
- JWT 토큰을
JwtUtil을 통해 검증하고, Claims를 추출합니다.
- 검증된 Claims에서 유저의
userId, email, nickname, userRole을 가져옵니다.
- Spring Security 인증 정보 설정:
UsernamePasswordAuthenticationToken을 생성하여, 인증된 사용자 정보와 권한을 SecurityContextHolder에 설정합니다.
4. Spring Security 설정 추가
SecurityConfig 클래스 작성