我有两个对象,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 : [email protected], PASSWORD: gojoe, LIST<ROLE>: ROLE_ADMIN
CustomUserDetails instance of User
java.lang.ClassCastException: model.User cannot be cast to model.CustomUserDetails
为什么即使我通过了 instanceof 检查,我也无法从 User 向下转换为 CustomUserDetails?UserDetails 接口类是否妨碍了我成功转换?
您正在尝试投射
customUserDetails = (CustomUserDetails) user;
但用户不是那个实例,用户是用户的实例。尝试向 User 类添加一个 getter 以获取 CustomUserDetails 或使用if(user instanceof CustomUserDetails){...
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句