在我目前的实现中,我有一个User
实体,实现了org.springframework.security.core.userdetails.UserDetails
接口。Spring Security UserDetails和用户名
@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(主键)。现在我不知道什么是实施它的正确方法。 – alexanoid
这只是一个评论回答**为什么**用户名不能为空。用什么作为用户名取决于你的实现。 –