如何知道当前的 Web 访问者是不是使用 Spring Security 3.0 登录
Posted
技术标签:
【中文标题】如何知道当前的 Web 访问者是不是使用 Spring Security 3.0 登录【英文标题】:How to know if current web visitor logged in with Spring Security 3.0如何知道当前的 Web 访问者是否使用 Spring Security 3.0 登录 【发布时间】:2011-08-14 05:08:29 【问题描述】:我们正在使用 Spring Framework 和 Spring Security 3.0.x,我们如何知道当前访问者是否已登录以及他们的用户名是什么?我一直有以下代码:
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”。
接下来,我应该如何检查访问者是否已登录以及他们的用户名是什么?
【问题讨论】:
【参考方案1】:获取当前登录用户的正确方法记录在here,大部分与上面的代码匹配。
看起来您可能为您的站点配置了anonymous
身份验证,这就是主体返回anonymousUser
的原因。
【讨论】:
以上是关于如何知道当前的 Web 访问者是不是使用 Spring Security 3.0 登录的主要内容,如果未能解决你的问题,请参考以下文章