如何知道当前的 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;

instanceofs 的原因是过去有时 getPrincipal() 会返回 String,有时会返回 User...

所以我会简单地检查 getUsername() 是否返回 null 以查看当前访问者是否已登录。但是,最近升级某些组件时,我们的 Spring 库中发生了一些变化。现在如果用户没有登录,getPrincipal() 返回String“anonymousUser”。

接下来,我应该如何检查访问者是否已登录以及他们的用户名是什么?

【问题讨论】:

【参考方案1】:

获取当前登录用户的正确方法记录在here,大部分与上面的代码匹配。

看起来您可能为您的站点配置了anonymous 身份验证,这就是主体返回anonymousUser 的原因。

【讨论】:

以上是关于如何知道当前的 Web 访问者是不是使用 Spring Security 3.0 登录的主要内容,如果未能解决你的问题,请参考以下文章

java web 如何防止 用户绕过js验证,直接地址栏提交表单或自己编写html页面,提交数据到服务器?

如何使 Node API 只能由 Web 应用程序访问?

spring 手动整合web项目(SSH)

spring 手动整合web项目(SSH)

cookie详解

普通java类文件如何访问WEB-INF目录下的文件,不是Servlet、JSP类文件