【发布时间】:2012-07-20 15:18:56
【问题描述】:
我目前正在开发一个使用 Spring Security 的系统。我已经设置了身份验证提供程序,但在创建自定义用户类型时遇到了问题,该用户类型将存储我需要的所有信息。
在身份验证提供程序中,我调用“用户服务”,它是系统中用户的 DAL。然后返回一个“用户”对象。这很好,一切正常。
然后我定义了一个 MyCompanyUserDetails 对象,其中包含我需要的所有自定义属性。该类扩展了“用户”类。
我的问题是我无法将用户转换为 CompanyUserDetails。我在这里错过了什么吗?
自定义用户详细信息类型:
public class MyCompanyUserDetails extends User {
在我的身份验证提供程序中:
// Create / Update the user.
User raw_user_details = getUser(username_str, groups_of_user);
// Create our Custom user object filled with the parameters we need for the rest of the system.
MyCompanyUserDetails details = (MyCompanyUserDetails) raw_user_details;
我收到的异常:
java.lang.ClassCastException: User cannot be cast to MyCompanyUserDetails
任何帮助/指导将不胜感激...
【问题讨论】:
-
您可以提供任何错误或异常吗?
-
MyCompanyUserDetails是哪个类?您提到了扩展User的CompanyUserDetails类。如果MyCompanyUserDetails还扩展了User类,那么您正在尝试向下转换实例变量,我认为这是不可能的,这就是为什么您必须得到该异常 -
我很抱歉他们是同一班人。
-
那一定是向下转换的问题
-
我猜你需要以 loadUserByUsername 方法返回 MyCompanyUserDetails 实例的方式实现自己的 UserDetailsService
标签: java spring casting data-access-layer