Spring Security Trouble-Shooting

이유진·2024년 10월 10일
0

스프링 이론 다지기

목록 보기
12/12
post-thumbnail

🚀Trouble-Shooting

🔥1. 문제 상황

  • JWT를 Security로 변환하는 과정에서 User Entity에 아래와 같은 오류가 생겼다.


🖐️2. 원인

  • 원인은 User 클래스의 생성자가 AuthUser의 authorities 필드 타입과 일치하지 않기 때문이다. 아래 사진과 같이 authUser.getAuthorities()Collection<? extends GrantedAuthority> 타입을 반환하지만, User 클래스의 생성자가 이 타입을 수용할 수 있도록 정의되지 않은 경우 오류가 발생할 수 있다.


💡3. 해결방안1

  • 처음에는 아래와 같이 authUser.getAuthorities()로부터 권한 목록을 가져와서 스트림의 첫 번째 권한을 Optional로 가져온다.

  • 하지만, 위와 같이 작성 할 때 .get()Optional의 값을 가져오는 메서드인데, 값이 없는 경우 예외가 발생할 수 있다.

  • 튜터님께서 이부분을 핸들링하여 안전하게 처리하는 것이 좋다고 조언해 주셔서 수정해보았다!


✨4. 해결방안2

  • 사용자의 권한 목록에서 첫 번째 권한을 Optional로 가져온 후, Optional 값이 존재할 때, UserRole.of()를 사용해 GrantedAuthorityUserRole로 변환한다. Optional 값이 비어 있을 경우, 기본값으로 UserRole.ROLE_USER를 사용한다.

    • UserRole.of 메서드는 문자열을 받아서 해당하는 UserRole 열거형을 찾고, 찾지 못하면 예외를 발생시키는 역할을 한다.
  • 이렇게 하면 권한이 없거나 설정되지 않은 경우에도 안전하게 기본 역할을 지정할 수 있다!!

profile
🙌중요한건 꺾였는데도 그냥 하는 마음

0개의 댓글