2014-09-03 104 views
0

我有一個關於Spring Security的快速問題,並獲取當前登錄的User的更多信息(實例變量)。默認情況下,不需要編寫自己的UserDetailsService有沒有辦法獲得在我的User bean中定義的任何其他實例變量?正如你可能知道通過將下面的代碼在我的控制器中的一個我有機會獲得以下領域,如:用戶名,密碼,啓用,當局等Spring Security用戶信息

UserDetails userDetails = 
       (UserDetails) ((Authentication)principal).getPrincipal(); 

我想獲得其他信息如下面的實例變量我在用戶對象定義(ID,姓名,電子郵件等):

// Instance Variables 
private int id; 
private String name; 
private String email; 
private String username; // I can already obtain this 
private String password; // I can already obtain this 

能否請您提供的方式,我可以得到更多的信息,一些進一步的協助?

回答

1

大家都知道,你可以得到UserDetails對象使用如下代碼。

UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 

使用UserDetails對象,您可以獲取用戶名,密碼和權限。現在您需要該用戶的ID和電子郵件。在這種情況下,一旦用戶通過了身份驗證,就可以擁有一個數據庫查詢,它將通過用戶名返回用戶對象。

1

您的用戶對象必須實現UserDetails接口。當你得到一個引用時,它會正確地轉換它,這樣你就可以訪問getter方法。

比方說,您的用戶對象是像

public class MyUser implements UserDetails{ 
    private int id; 
    private String name; 
    private String email; 
    private String username; 

} 

成功的登錄後,你將存儲MYUSER的實例作爲校長。

然後

 MyUser userDetails = 
      (MyUser) ((Authentication)principal).getPrincipal(); 
    String name = userDetails.getName(); 
+0

謝謝你。你能否提供一個例子,說明你'當你得到一個引用時正確地轉換它'的意思。這將不勝感激。 – Maff 2014-09-03 03:18:04

相關問題