2013-05-08 60 views
0

我該怎麼知道getDetails()getPrincipal()等回報SecurityContextHolder.getContext().getAuthentication()?該類型是對象,我無法理解文檔中寫的是什麼。春季安全驗證對象的方法

回答

0

這個怎麼樣? (假設getPrincipal()沒有返回null

String className = SecurityContextHolder.getContext().getAuthentication().getPrincipal().getClass().getName(); 

它應該返回附有包名的類名,即完全合格的類名。我認爲這個類型會實現java.security.Principal(某些彈簧專用的類)。所以,你可以做到以下幾點:

Principal p = (Principal) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
0

getDetails()返回一個包含用戶的IP地址和會話ID(雖然我懷疑這可能取決於應用程序的類型WebAuthenticationDetails對象;因爲getPrincipal()同樣是相關的,它突出原因getDetails()也可能以類似的方式變化)。

getPrincipal()返回一個對象,這取決於您如何管理身份驗證。例如,使用LDAP身份驗證,getPrincipal()方法將返回一個LdapUserDetailsImpl對象。

如果您需要訪問的用戶/主體信息,我會建立一個自定義的UserDetails類,並存儲/檢索有所需的信息,但你可以很容易地使用getPrincipal()getDetails()提供你施放它們作爲符合條件的課程,或者擴展他們自然返回的課程(並按照您的喜好管理它們)。

我覺得有些有趣的是,getPrincipal()方法實際上並不返回一個Principal對象(也不能將LdapUserDetailsImpl對象轉換爲Principal對象)。