2011-04-27 28 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

相关问题