如何在使用Spring Security时获取身份验证信息?

3

在我的页面中,我使用了标签:security:authorize ifAnyGranted="ROLE_USER,ROLE_ADMIN"。它能够正常工作。

但是在服务器端,当我使用SecurityContextHolder.getContext().getAuthentication().isAuthenticated()时,它总是返回true。即使我没有登录,系统也会将anonymousUser视为登录用户。

我该如何避免这种情况发生呢?

2个回答

5

SecurityContextHolder.getContext().getAuthentication().isAuthenticated() 几乎总是返回 true。

请使用此方法。

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

4
如果使用的是Spring Security 2.x版本,可以使用AuthorityUtils.userHasAuthority(String authority)方法来显式检查角色。你可以遍历SecurityContextHolder.getContext().getAuthentication().getAuthorities(),并确保只允许你想要的角色进行操作。

谢谢,我知道这种方法,我还以为有另一种方法。SecurityContextHolder.getContext().getAuthentication().getAuthorities()。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接