在我的页面中,我使用了标签:security:authorize ifAnyGranted="ROLE_USER,ROLE_ADMIN"。它能够正常工作。
但是在服务器端,当我使用SecurityContextHolder.getContext().getAuthentication().isAuthenticated()时,它总是返回true。即使我没有登录,系统也会将anonymousUser视为登录用户。
我该如何避免这种情况发生呢?
在我的页面中,我使用了标签:security:authorize ifAnyGranted="ROLE_USER,ROLE_ADMIN"。它能够正常工作。
但是在服务器端,当我使用SecurityContextHolder.getContext().getAuthentication().isAuthenticated()时,它总是返回true。即使我没有登录,系统也会将anonymousUser视为登录用户。
我该如何避免这种情况发生呢?
SecurityContextHolder.getContext().getAuthentication().isAuthenticated() 几乎总是返回 true。
请使用此方法。
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
return authentication != null && !(authentication instanceof AnonymousAuthenticationToken) && authentication.isAuthenticated();
AuthorityUtils.userHasAuthority(String authority)
方法来显式检查角色。你可以遍历SecurityContextHolder.getContext().getAuthentication().getAuthorities()
,并确保只允许你想要的角色进行操作。