작성
·
75
0
안녕하세요. 선생님
학습중에 에러가 발생하여 문의드립니다.
인증 성공 핸들러에 onAuthenticationSuccess 메소드로 넘어 오는데 authentication.getPrincipal() 의 타입이 java.util.ImmutableCollections$List12 로 와서 AccountDto로 cast가 안되는 에러가 발생하는데 원인을 모르겠습니다. ㅠㅠ
에러 내용
java.lang.ClassCastException:
class java.util.ImmutableCollections$List12
cannot be cast to class
com.test.security.domain.dto.AccountDto (java.util.ImmutableCollections$List12 is in module java.base of loader 'bootstrap'; com.test.security.domain.dto.AccountDto is in unnamed module of loader 'app')
에러 발생한 부분
AccountDto accountDto = (AccountDto) authentication.getPrincipal();
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다.
getPrincipal()
메소드에서 반환되는 객체 타입이 예상하신 AccountDto
타입과 다른 것 같습니다. getPrincipal()
이 반환하는 객체는 인증 과정에서 설정한 Principal
객체이며, 이는 보통 UserDetails
의 인스턴스 또는 Authentication
객체에 설정된 사용자 정의 타입이 될 수 있습니다. 여기서는 List
타입으로 반환되고 있는데, 이는 UserDetailsService
에서 사용자 정보를 로드하는 과정에서 반환 타입을 잘못 설정했거나, 인증 객체에 예상치 못한 타입이 설정된 경우일 수 있습니다.
해결 방법으로는 먼저 UserDetailsService
구현을 확인하여 loadUserByUsername
메소드가 UserDetails
를 올바르게 반환하고 있는지 확인하세요. 그리고 인증 과정에서 Authentication
객체에 principal
로 AccountDto
가 아닌 다른 객체가 설정되지 않았는지 점검해 보세요.
authentication.getPrincipal()
호출 결과를 직접 AccountDto
로 캐스팅하기 전에, 실제 반환된 객체 타입을 확인하거나, instanceof
를 사용하여 AccountDto
타입인지 먼저 검사하는 것도 좋은 방법입니다.
에러 상황에 따라 정확한 원인과 해결책이 달라질 수 있으니, 이러한 점검 과정을 통해 문제를 해결해 보시기 바랍니다.