在我目前的實現中,我有一個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
這只是一個評論回答**爲什麼**用戶名不能爲空。用什麼作爲用戶名取決於你的實現。 –