일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- addAttribute
- 2178
- 음료수얼려먹기
- 2667
- pep8
- 화살표함수
- Spring
- SWEA
- 이코테
- 우선순위큐
- 삼성소프트웨어
- major gc
- 2606
- JWT
- MSSQL
- Arecode
- 파이썬스럽게
- 백준
- dfs
- heapq
- __name__
- WebMvcConfigurer
- minmax
- 미로탈출
- 파이썬컨벤션
- BFS
- React
- 미로탐색
- 단지번호붙이기
- setviewname
- Today
- Total
하루하루는 성실하게 인생 전체는 되는대로
[JAVA] JWT 인증 적용 (+WebMvcConfigurer와 Interceptor) 구현 본문
# 진행 순서
사용자 요청(Request) -> Servlet Filter -> Dispatcher Servlet -> Interceptor -> Controller
1. WebMvcConfigure 클래스 생성 (WebMvcConfigurer를 implements로 상속받음)
: WebMvcConfigure가 제일 앞단에서 사용자의 HttpRequest를 잡아 처리해줄 것이다.
- @ComponentScan (패키지 경로)로 interceptor에 대한 componentScan이 가능하도록 지정해주었다.
- @EnableWebMvc : dispatcherServlet 생성시 필요한 config들을 알아서 생성해준다. (interceptor도)
- JwtAuthProvider를 final로 선언. AuthHandlerInterceptor는 autowired 로 주입
- 상속받은 WebMvcConfigurer에서 현재 필요한 2가지 메서드를 구현해줬다.
(1) addCorsMappings
: cors 관련 설정해줌
(2) addInterceptors
: interceptor를 적용해줌. (이때 적용한 interceptor 클래스가 authHandlerInterceptor)
- excludePathPatterns를 통해 interceptor 적용되지 않을 경로를 지정할 수 있다.
# (참고) final의 가이드라인
: immutable 즉 read-only하도록 만들때, 개발 구성원 간의 합의하에 사용
(상속 불가 / Entity를 한 번만 할당하게 함 ..)
2. AuthHandlerInterceptor
: 위의 WebMvcConfigure의 addInterceptors를 통해 interceptor 적용이 확정된 요청들을 처리한다.
- HttpServletResponse에서 header를 가져와 AUTHORIZATION되어있는지 확인한다. (bearer 방식일 경우)
- 위 값이 미존재시 토큰이 존재하지 않는 것이다. JwtAuthProvider로 문자열에서 토큰값 추출했을 때 그 값이 유효한지 확인해준다.
3. JwtAuthProvider
: jwt토큰을 생성, 파싱하는 메서드를 생성할 클래스이다.
(1) JWT 토큰 생성
- BASE 64 HS256
(2) 토큰 유효성 검사 및 파싱
- JWts.parser() 사용
(3) 문자열에서 토큰값 추출
- header의 jwt 키에 대한 값을 가져온다.
4. 토큰을 생성하고 확인하는 시점 (Controller단)
- 로그인시에는, 토큰을 확인할 필요가 없고, 토큰을 생성해서 반환해줘야 한다.
=> url 경로를 interceptor가 적용되지 않도록 excludePathPatterns을 적용하여 지정한다.
=> response에 "jwt-auth-token"으로 header 키를 달아서 토큰을 value로 담아 return해준다. (jwt-auth-token 방식일 경우)
- 홈, 마이페이지 등에서는, 토큰을 확인해줘야 한다.
-----------------------------------------------------------------------------------------------------------------
(작업 메모)
현재 bearer랑 jwt-auth-token이 혼재되어 있기 때문에 => 하나로 방향잡아서 개발해야 한다.
그리고 pointcut 등을 활용한 loggingAop도 구현하자.
'JAVA' 카테고리의 다른 글
[JWT] JSON Web Token이란 (0) | 2022.09.10 |
---|---|
[JAVA] JVM - Heap Memory와 GC(가비지 콜렉션) (0) | 2022.02.16 |
[JAVA] 예외처리의 중요성 (0) | 2022.01.20 |