개발 블로그
article thumbnail
Published 2023. 4. 29. 20:44
[TIL] DAY 27 항해99

오늘 겪은 문제

유저 권한에 대한 정보를 JWT 에 담아서 발행한 후 권한 정보 확인이 필요한 요청이 들어올 시 JWT 에 담아뒀던 정보를 확인하고자 했다. 권한은 미리 정해놓은 것들 외에는 들어가면 안 된다고 생각하여 enum을 활용했다.

 

JWT 발행 시 "auth"라는 키에 enum 객체를 value로 집어넣고 추후 확인 시 == 연산을 통해 enum 객체와 일치하는지 확인했다. enum 은 생성자가 private 이라 객체가 하나만 만들어지는 것으로 알고 있었고 따라서 == 연산 시 당연히 내가 원하는 결과가 나올 것이라 생각했다.

 

하지만 true 가 나오기를 기대했던 연산에 대해서 false 가 나와 혼란스러웠다.

 

 

해결 방법

JWT 발행 시 집어넣었던 enum 객체가 다시 확인할 때는 String 이 되는 상황이라 JWT 에 담아둔 다른 정보 (String username) 를 이용해 DB에서 user를 조회해오고 매핑된 User 객체의 권한 정보(enum) 를 통해 == 연산을 하도록 하여 해결했다.

 

그런데 왜 String 이 될까??

 

JWT 는 Json Web Tokens 의 약자로 실질적으로는 "Json" 데이터다. Json 데이터에는 enum 이라는 개념은 존재하지 않는다. 그래서 enum 객체를 value 로 넣어도 이게 Json 으로 변환되는 과정에서 그냥 문자열이 되는 것이다.

 

실제로 jwt.io 사이트에 내가 발행한 JWT 를 넣어 복호화 해보면 담았던 enum 객체가 문자열이 된 것을 확인할 수 있었다.

 

사실 JWT에 권한 정보를 담았으면 당연히 이를 활용해야 한다고 생각했는데 결국 내가 사용한 해결 방법은 JWT에 담은 권한 정보는 사용하지 않는 것이었다. 뿐만 아니라 User 객체를 가져오기 위해 DB 에 한 번 더 갔다와야 하는 불필요한 일도 하게 되었다.

 

그래서 다음에는 enum 클래스를 만들 때 String type의 private 필드를 하나 만들어서 이 값이 JWT 에 담기게 하고 이를 이용해 권한 정보를 확인하는 방법을 사용해봐야겠다.

'항해99' 카테고리의 다른 글

[TIL] DAY 29  (0) 2023.05.01
[WIL] 항해 4주차  (0) 2023.05.01
[TIL] DAY 25  (0) 2023.04.27
[TIL] DAY 24  (0) 2023.04.26
[TIL] DAY 22  (0) 2023.04.24
profile

개발 블로그

@하얀.손

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!