본문 바로가기
SI 업무/나만의 프로젝트 만들기

11-4.JWT-정리 & 최종 소스

by 새로운걸 배우는게 너무 싫은 IT 복붙러 2024. 12. 16.
728x90

이전 작업들에서 
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 한다.

 

 

해당 내용 관련 소스는 아래에 올렸다.

https://github.com/suersehii1/study.git

728x90