🚨 문제
로그인은 정상적으로 작동하여 JWT accessToken까지 정상적으로 생성되었다.
하지만 생성된 AccessToken을 사용하려고 할 때 문제가 발생했다.
console창에도 어떠한 로그가 나타나지 않았고 filter에서 걸러진다는 것을 짐작했다.
Debug를 하면서 천천히 다시 과정을 따라가 보았다.

UsernamePasswordAuthenticationToken [Principal= eyJhbGciOiJIUzM4NCJ9.eyJzdWIiOiJ0ZXN0MSIsImF1dGgiOiJVU0VSIiwiaWF0IjoxNzE5NTYwMjIzLCJleHAiOjE3MTk1NjM4MjN9.ZyzX9XetqAteu81p2K3N5vYTWHmuBorxODTZ_piHYJreGKseNk096O5hRUGKP9jm, Credentials=[PROTECTED], Authenticated=false, Details=null, Granted Authorities=[]]
디버깅을 하면서 객체의 값을 따라가고 있는 도중에 jwtTokenProvider에서 getAuthentication(token) 메서드를 실행했을 때 생성된 Authentication 객체는 Authenticated = false 로 인증이 되어 있지 않고 Granted Authorities 에 null이 들어있는 것을 알 수 있었다.
[변경 전 코드]

UsernamePasswordAuthenticationToken(accessToken, authorities)에서 문제가 발생하는 것으로 생각이 들어 자세히 뜯어보기 위해 들어갔다.
public UsernamePasswordAuthenticationToken(java.lang.Object principal, java.lang.Object credentials) { /* compiled code */ }
public UsernamePasswordAuthenticationToken(
java.lang.Object principal,
java.lang.Object credentials,
java.util.Collection<? extends org.springframework.security.core.GrantedAuthority> authorities
) { /* compiled code */ }
UsernamePasswordAuthenticationToken의 생성자는 2가지 종류가 있었다.
💡 권한을 포함하고 싶으면 아래의 생성자를 사용해야 하는데 나는 값을 2개 밖에 주지 못했던 것이다💡
[변경 후]

accessToken과 authorities 사이에 credentials 값을 추가했더니 정상적으로 작동했다!!!
앞으로 생성자를 사용할 때 잘 확인하고 사용하자!!
'Knowledge > Trouble Shooting' 카테고리의 다른 글
| Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argument (0) | 2024.07.08 |
|---|---|
| @AuthenticationPrincipal 에 null 값이 들어오는 에러 (0) | 2024.07.07 |
| 순환 참조(Circular References) 해결 (0) | 2024.06.10 |
| java.lang.StackOverflowError: null (0) | 2024.06.10 |
| 웹소켓 STOMP 에러 트러블 슈팅 (0) | 2024.05.27 |