使用spring security时如何获取认证信息?

Posted

技术标签:

【中文标题】使用spring security时如何获取认证信息?【英文标题】:How to get authentication infomation when using spring security? 【发布时间】:2011-04-20 10:09:00 【问题描述】:

在我使用标签的页面上: 安全性:授权 ifAnyGranted="ROLE_USER,ROLE_ADMIN" ... 有用。 但在服务器端:我使用 SecurityContextHolder.getContext().getAuthentication().isAuthenticated(),它总是正确的。当我没有登录时,系统以anonymousUser为登录用户。

我怎样才能避免这种情况?

【问题讨论】:

【参考方案1】:

SecurityContextHolder.getContext().getAuthentication().isAuthenticated() 几乎总是会返回 true。 用这个

Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return authentication != null && !(authentication instanceof AnonymousAuthenticationToken) && authentication.isAuthenticated();

【讨论】:

【参考方案2】:

如果是spring security 2.x,有AuthorityUtils.userHasAuthority(String authority)可以用来明确检查角色。

您可以遍历 SecurityContextHolder.getContext().getAuthentication().getAuthorities() 并确保您只允许对您想要的角色进行操作。

【讨论】:

谢谢,我知道这种方法,我通过其他方法。SecurityContextHolder.getContext().getAuthentication().getAuthorities()

以上是关于使用spring security时如何获取认证信息?的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你如何使用Spring Security(中):接口认证

Spring Security 认证成功后返回匿名用户

Spring Security + JWT学习

Spring Security 2.0,获取用户的认证状态

spring security 的jwt认证以及原理解析

spring security 的jwt认证以及原理解析