2011-04-27 29 views
6

我們使用的是Spring Framework和Spring Security 3.0.x,我們如何知道當前訪問者是否已登錄並且他們的用戶名是什麼?我一直有下面的代碼:如何知道當前的Web訪問者是否使用Spring Security 3.0登錄

public static String getUsername() { 
    Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); 
    if (principal == null) 
     return null; 
    if (principal instanceof String) 
     return (String) principal; 
    if (principal instanceof User) 
     return ((User) principal).getUsername(); 
    return null; 
} 

的原因instanceof s是過去有時getPrincipal()將返回String,有時一個User ......

所以我想簡單地檢查是否getUsername()返回null以查看當前訪問者是否已登錄。但是,最近升級某些組件時,我們的Spring庫中發生了一些變化。現在如果用戶未登錄,getPrincipal()返回String「anonymousUser」。

展望未來,我應該檢查訪問者是否登錄並且他們的用戶名是什麼的正確方法是什麼?

回答

4

獲取當前登錄用戶的正確方法記錄在here中,其中大部分符合上述代碼。

看起來您可能已爲您的網站配置anonymous驗證,這就是爲什麼委託人返回anonymousUser

相關問題