Seattle 의 Pike Place Market 과 껌벽....! 껌벽은 사람들이 씹던 껌을 벽에 덕지덕지 붙여 생긴 관광 명소라고 한다 시에서 껌벽을 한번 싹 청소하였지만 이후에도 계속 관광객들이 껌을 붙여서 다시 더러운 거리로 원상복구가 되었다고.....

 

 

 

 

 

- TIL -

구현 목표)

사용자가 Token 을 가지고 API 의 엔드포인트에 접근했을때 Security 에서 JWTUtil 클래스를 거쳐 유저가 정상적인 토큰을 가지고 있는지 검증한 뒤 해당 Token 의 값을 기준으로 User 의 정보를 가져와 다른 클래스에서 필요할때 사용하고자 하였다.

 

 

 

문제 발생)

Token 에서 유저의 정보를 가져오는 방법으로는

 

1) payload 값에 유저에 대한 정보를 모두 넣어 서버에서 디코딩하여 확인하는 방법

2) SecurityContextHolder 에서 검증된 유저의 email 정보를 가지고 DB 를 한번 훑어서 유저의 정보를 가져오는 방법

 

위 두가지 방법이 존재하는 것으로 파악하였다, 위 두 가지 방법 중 나는 후자를 선택하여 구현하고자 하였는데 이유로는 사용자의 Local Strage 의 Token 정보가 항상 동기화 되어있지 않을 수 있다는 문제점이 있기 때문에 확실하게 DB 를 한번 거쳐서 동기화된 사용자의 정보를 출력하여 사용하고자 하였다.

 

또한 전자로 구현하는 경우 Token 정보를 받아서 처리해야 하기 때문에 HttpServletRequest 객체를 매개변수로 매번 넘겨야하는 번거로움이 있는 반면 후자로 구현하고자 하면 매개변수를 넘기지 않고도 Spring Security 에서 인증된 사용자에 대한 객체 정보를 저장하고 있는 SecurityContext 를 활용하여 유저에 대한 정보를 확인할 수 있기 때문에 코드가 간결해진다는 장점이 있다...!!

 

 

 

 

문제 해결)

1) payload 의 값을 기준으로 유저에 대한 정보를 확인하는 코드

JWT 를 파싱하여 디코딩한 뒤 유저 정보를 DTO 로 담아서 리턴하는 메소드

 

2) SecurityContextHolder 를 활용하여 User 정보를 불러온 코드

Token 정보를 기준으로 검증된 사용자의 정보가 담긴 SecurityContextHolder 의 유저 email 정보를 가지고 usersRepository 를 활용하여 DB 의 User 정보를 출력하여 사용하는 로직을 작성하였다.

 

728x90

+ Recent posts