Spring security:用户是登录的还是匿名的?

Posted

技术标签:

【中文标题】Spring security:用户是登录的还是匿名的?【英文标题】:Spring security: is the user logged in or anonymous? 【发布时间】:2015-06-22 20:56:47 【问题描述】:

我需要一个公共的 restful 端点,它可以告诉我当前用户是否登录。由于用户可能被认证为anonymousUser,我不能这样做:

if (SecurityContextHolder.getContext().getAuthentication().isAuthenticated())
...

通过查看其他一些帖子,看来我可能需要做一些笨拙的事情,例如在授予权限中实际寻找匿名角色。有没有更简单的方法?

【问题讨论】:

【参考方案1】:

你也可以use(不是很好,但可以):

SecurityContextHolder.getContext().getAuthentication() != null &&
SecurityContextHolder.getContext().getAuthentication().isAuthenticated() &&
//when Anonymous Authentication
!(SecurityContextHolder.getContext().getAuthentication() 
          instanceof AnonymousAuthenticationToken) 

【讨论】:

【参考方案2】:

这是我认为最简单的解决方案:

// permitAll
@RequestMapping(method = RequestMethod.GET, value = "/isAuthorized")
public String isAuthorized(Principal user)                 
    return user != null ? "Y" : "N";

【讨论】:

以上是关于Spring security:用户是登录的还是匿名的?的主要内容,如果未能解决你的问题,请参考以下文章

Spring security3.1.x session问题,求解

Spring Security 推荐的设计以请求用户登录到具有不同角色的不同用户

使用 Spring Security 进行会话管理

spring security实现记住我下次自动登录功能

#私藏项目实操分享# Spring专题「开发实战」Spring Security与JWT实现权限管控以及登录认证指南

成功登录后如何更新 Spring Security UserDetails impls?