【发布时间】:2016-04-27 12:29:57
【问题描述】:
在我当前的实现中,我有一个实现org.springframework.security.core.userdetails.UserDetails 接口的User 实体。
@Entity
@Table(name = "users")
public class User extends BaseEntity implements UserDetails {
private static final long serialVersionUID = 8884184875433252086L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Integer id;
private String username;
private String password;
....
在 OAuth2 授权期间,我手动创建了一个新的 User 对象,填充其字段并存储在我的数据库中。
根据UserDetails 合同 - UserDetails.getUsername() 方法无法返回 null 但我没有从社交网络检索到可用作用户名的值。
在这种情况下,User.getUsername() 方法应该返回什么值?
这样的东西可以退货吗?
@Override
public String getUsername() {
return String.valueOf(id);
}
【问题讨论】:
-
看看
User,它是UserDetails的参考实现。来自 javadoc:equals和hashcode实现仅基于username属性,因为其目的是查找相同的用户主体对象(例如,在用户注册表中)将匹配对象代表的位置相同的用户,而不只是当所有属性(例如权限、密码)都相同时。 -
感谢您的回答。引用 User 类期望在从外部创建对象期间设置用户名。回答我的问题对我没有帮助,因为我正在寻找一个必须作为用户名提供的值。例如,它可以是某种 GUID 或我的 id(主键)。现在我不知道实现它的正确方法是什么。
-
这只是回答为什么用户名不能为空的评论。使用什么作为用户名取决于您的实现。
标签: spring spring-security spring-data spring-security-oauth2