- ✅ Filter 생성 구조 이해
- ✅ 요청(Request) / 응답(Response) 흐름 파악
- ✅ OncePerRequestFilter 동작 원리 이해
- ✅ Filter 실행 순서(@Order) 이해
- ✅ Controller 이전 단계 처리 구조 이해
- ✅ JWT 구조(Header / Payload / Signature) 이해
- ✅ 토큰 생성 과정 이해
- ✅ 토큰 검증 흐름 이해
- ✅ Spring Boot 기반 JWT 인증 흐름 이해
- ✅ Authentication 객체 이해
- ✅ SecurityContextHolder 역할 이해
- ✅ Filter → Security 흐름 파악
- ✅ Authentication 객체 이해
- ✅ SecurityContextHolder 역할 이해
- ✅ Filter → Security 흐름 파악
- ✅ 인증(Authentication) / 인가(Authorization) 흐름 구분
- ✅ Filter 생성 구조 이해
- ✅ 요청(Request) / 응답(Response) 흐름 파악
- ✅ OncePerRequestFilter 동작 원리 이해
- ✅ Filter 실행 순서 (@Order) 이해
- ✅ Controller 이전 단계 처리 구조 이해
- Filter 적용
- OncePerRequestFilter 기반 필터 구현
- 요청 진입 전 / 응답 반환 후 흐름 확인
- JWT 인증 방식 구현
- SecretKey 초기화
- Access Token 발급
- 토큰 유효성 검증
- Claims 정보 추출
- 로그인 구현
- 로그인 성공 시 JWT 토큰 발급
- 클라이언트에 Access Token 전달
- Authorization Header 기반 인증 구조 설계
- Token 결과 인증
- Authorization Header 존재 여부 검증
- Bearer Token 형식 검증
- JWT 토큰 유효성 검사
- 인증 실패 시 요청 차단
- Postman을 통한 인증 테스트 수행
-
JWT 인증 방식 구현
- SecretKey 초기화
- Access Token 발급 로직 구현
- JWT 서명(Signature) 생성
- 토큰 만료 시간(exp) 설정
- Claims 정보 추출 기능 구현
-
로그인 구현
- 로그인 성공 시 JWT Access Token 발급
- 토큰을 Response Body로 클라이언트에 전달
- Stateless 인증 구조 설계
- Spring Security 연동
- 기본 Security 설정 비활성화
- FormLogin 비활성화
- HttpBasic 비활성화
- CSRF 비활성화
- JWT Filter 등록
- .addFilterBefore(jwtFilter, SecurityContextHolderAwareRequestFilter.class)
- 인증 성공 시 SecurityContextHolder 저장
- 이후 인가 과정은 Spring Security가 자동 처리
- Interceptor 구현
- JWT 인증 기반 사용자 정보 수정
- 사용자 소유권(Owner) 검증
- Spring Security + Interceptor 흐름 이해
- 403 Forbidden 발생 원인 분석 및 해결
- AOP(Aspect Oriented Programming) 개념 이해
- 횡단 관심사(Cross Cutting Concern) 분리
- @Aspect, @Around 동작 구조 이해
- Filter / Interceptor / AOP 실행 순서 파악
- 서비스 레이어 실행 시간 측정 AOP 구현
🧩 전체 인증 · 인가 흐름
요청 발생 ↓ JwtFilter (인증 / 인가) ↓ OwnerCheckInterceptor (소유자 검증) ↓ Controller ↓ AOP (실행 전) ↓ Service 메서드 실행 ↓ AOP (실행 후) ↓ Controller return ↓ JwtFilter (응답 후) ↓ Postman 응답 반환
1️⃣ JwtFilter 인증 성공 2️⃣ Interceptor 소유자 검사 3️⃣ Controller 진입 4️⃣ AOP 실행 전 5️⃣ Service 메서드 실행 6️⃣ AOP 실행 후 7️⃣ Controller 종료 8️⃣ JwtFilter 응답 전달
implementation "io.jsonwebtoken:jjwt-api:0.12.5"
runtimeOnly "io.jsonwebtoken:jjwt-impl:0.12.5"
runtimeOnly "io.jsonwebtoken:jjwt-jackson:0.12.5" // JSON 직렬화