java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.Map (java.lang.String and java.util.Map are in module java.base of loader 'bootstrap')

rse·2023년 8월 3일

에러를 만났다.

User 조회시 userId 를 넣지 않고 Header 의 Authorization 으로 넘어오는 accessToken 으로 User 를 조회하고자 JwtVerificationFilter 의 setAuthenticationToContext 라는 메서드에 코드를 추가해줬다.

setAuthenticationToContext 메서드는 인증이 끝난 사용자의 정보를 저장하는 메서드이다.

그리고 UserService 에서

저장된 사용자의 정보를 얻어오는 로직을 추가하였는데 get 요청에서 에러가 발생하였다.

내가 진행중인 프로젝트에서 get 은 인증 없이 요청이 가능하도록 되어있는 상태여서 Header 로 Authorization 이 넘어오지 않는 것.

그럼 당연히 JwtVerificationFilter 를 거치지 않을 것이고, findSSecurityContextHolderUserId() 메서드에 SecurityContextHolder 에 값이 들어있을리 없다.

Map은 <String, Object> 타입으로 원래는 email, userId 가 들어가게 로직을 구현해놨는데 null, null 이 들어오거나 에러를 낸 것 같다.

해결

get 요청을 보낼 때는 contextHolder 에서 찾아오는 방법이 아닌 다른 방법으로 user를 찾아야겠다.

profile
기록을 합시다

2개의 댓글

comment-user-thumbnail
2023년 8월 3일

유익한 글이었습니다.

1개의 답글