이전 작업들에서
JWT 를 쓰기 위해 gradle.build 로 종속성을 삽입함.
JWT 로 token을 만드는 JwtUtils.java 를 만들었음.
Spring Security 의 filter chain이 먼지를 배웠고, custom filter 를 두개 만들어 등록함.
작동 순서를 보면
1. http://localhost:9090 ui 에서 id/password 입력 후 엔터를 친다.

2. http://localhost:8080 으로 오는 요청이 온다.
주의 사항 : 혹시 Service (= controller) 에 /ap/login 으로 postMapping 이 존재 할 경우 무한루프를 돈다.
왜냐하면, Spring security 가 intercept 해서 처리 하는데 postMapping 이 또 처리 하고 또 중간에 intercept 되고 하기 때문이다.
그래서 최초에 만든 소스에 아래처럼 주석으로 /api/login이 막혀 있는것이다.

2-1. Spring Security 가 intercept 한다.
Intercept 후 등록된 filter chain을 수행 한다.

2-2. 요청의 URL 이 '/api/login' 일 경우 -> CustomAuthenticationFilter 에서
validateUserFromDB() 메소드 내에서 id/password가 db 상에 존재 하는지 확인 한다.

2-3. DB상에 존재 하면 successfulAuthentication() 메소내에서 JwtUtils 로 token 을 만들고 UI 에 전달 한다.
3. UI 는 전달 받은 token 을 localStorage 에 저장 한다.
저장 후 화면을 이동 한다.

4. 이동한 화면에서 RESTFul 요청시, header 에 localStorage 에 저장한 token 을 담는다.
담은 후 Server 에 요청을 한다.

5. http://localhost:8080 으로 오는 요청을 Spring Security 가 intercept 한다.
5-1. 요청의 '/api/login' 이 아니므로, filter chain 의 첫번째인 CustomAuthenticationFilter 는 건너 뛰고
다음 filter 인 JwtAuthorizationFilter로 간다.
5-2. JwtAuthorizationFilter 에서 header 부분의 token을 확인 하고 /api/login 때 만든 token 과 같은지 비교 한다.
같은 경우 Service 를 수행 하고 UI 에 response 한다.
해당 내용 관련 소스는 아래에 올렸다.
'SI 업무 > 나만의 프로젝트 만들기' 카테고리의 다른 글
| 11-3.JWT- SpringSecurity/ Filter chain (1) | 2024.12.14 |
|---|---|
| 11-2. JWT인증-Token 생성 (0) | 2024.12.14 |
| 11-1. JWT인증-의존성 추가 (0) | 2024.12.14 |
| 10. 기존 화면에 로그인 화면 추가 (0) | 2024.12.07 |
| 9. vue request-> spring response (0) | 2024.12.02 |