IS_AUTHENTICATED_FULLY的Spring security @notation?

wun*_*tee 2 spring-security

我只是尝试允许用户访问方法,如果他们经过身份验证,但我正在做的事似乎没有用.有没有办法检查用户是否已通过身份验证?即使经过身份验证,以下内容仍然会拒绝用户...是否有经过身份验证的用户的内置角色?

@RequestMapping("/secure")
@PreAuthorize("hasRole('IS_AUTHENTICATED_FULLY')")
public String secure(ModelMap map){
    return("secure");
}
Run Code Online (Sandbox Code Playgroud)

小智 13

IS_AUTHENTICATED_FULLY不是角色 - 它是一个预先定义的凭证(也称为"魔术"字符串)AuthenticatedVoter,表示您已登录.此选民还支持匿名和记住我的登录.

角色由RoleVoter处理,它识别以"ROLE_"开头的任何刺痛(前缀是可配置的).因此hasRole('IS_AUTHENTICATED_FULLY')不起作用,因为它不是一个角色.@RolesAllowed("IS_AUTHENTICATED_FULLY")不会出于同样的原因.

使用Spring表达式语言时,正确的表达式是:

 @PreAuthorize("isAuthenticated()")
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用:

 @Secured("IS_AUTHENTICATED_FULLY")
Run Code Online (Sandbox Code Playgroud)

不需要自定义类 - 默认情况下都启用两个选民.