У меня есть два объекта, User и CustomUserDetails, который расширяет User и реализует org.springframework.security.core.userdetails.UserDetails;
В своем слое хранилища я вызываю свою базу данных в памяти и извлекаю пользователя.
public User findByUsername(String username) {
CustomUserDetails customUserDetails = new CustomUserDetails();
User user = em.createQuery("from User where username = :username", User.class)
.setParameter("username", username).getSingleResult();
System.out.println(user.toString());
if(customUserDetails instanceof User) {
System.out.println("CustomUserDetails instance of User");
customUserDetails = (CustomUserDetails) user;
return customUserDetails;
} else {
System.out.println("CustomUserDetails is not instance of User");
throw new ClassCastException();
}
}
Вот мой вывод на консоль
ID: 1, USERNAME : joe.bloggs@example.com, PASSWORD: gojoe, LIST<ROLE>: ROLE_ADMIN
CustomUserDetails instance of User
java.lang.ClassCastException: model.User cannot be cast to model.CustomUserDetails
Почему я не могу перейти от Пользователя к CustomUserDetails, даже если я прошел проверку экземпляра? Класс интерфейса UserDetails мешает успешному приведению?