IS_AUTHENTICATED_FULLY的Spring security @notation?

时间:2010-03-26 22:33:29

标签: spring-security

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

@RequestMapping("/secure")
@PreAuthorize("hasRole('IS_AUTHENTICATED_FULLY')")
public String secure(ModelMap map){
    return("secure");
}

5 个答案:

答案 0 :(得分:12)

IS_AUTHENTICATED_FULLY不是角色 - 它是AuthenticatedVoter识别的预定义凭证(又名“魔术”字符串),表示您已登录。此选民还支持匿名并记住-me login。

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

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

 @PreAuthorize("isAuthenticated()")

或者,您可以使用:

 @Secured("IS_AUTHENTICATED_FULLY")

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

答案 1 :(得分:1)

hasRole('ROLE_USER')是经过身份验证的任何用户的传统名称。您通常会将ROLE_ANONYMOUS用于您不关心此人是否经过身份验证的部分。

(稍后补充:)

我认为您需要实现一个自定义AccessDecisionVoter,只要参数身份验证的isAuthenticated()为true,ACCESS_GRANTEDCONFIG_ATTRIBUTE或者ROLE_USER,就会始终投票{{1}}或类似。

在此forum discussion中对此进行了进一步的讨论,详细介绍了web.xml和其他配置。

答案 2 :(得分:1)

在自定义UserDetailService实现中,只需在User对象返回之前添加角色“IS_AUTHENTICATED_FULLY”。

答案 3 :(得分:0)

这就是我最终使用的内容:

@PreAuthorize("isAuthenticated()")

答案 4 :(得分:0)

这应该有效:

@PreAuthorize("isFullyAuthenticated()")