如果用户通过身份验证,我只是尝试允许他们访问某个方法,但我所做的似乎都不起作用。有没有办法只检查用户是否已通过身份验证?以下代码即使在通过身份验证时仍会拒绝用户...是否有针对经过身份验证的用户的内置角色?
@RequestMapping("/secure")
@PreAuthorize("hasRole('IS_AUTHENTICATED_FULLY')")
public String secure(ModelMap map){
return("secure");
}发布于 2012-07-14 20:46:47
IS_AUTHENTICATED_FULLY不是角色-它是AuthenticatedVoter识别的预定义凭据(也称为“魔术”字符串),用于指示您已登录。此投票者还支持匿名和记住我登录。
角色由RoleVoter处理,它识别任何以"ROLE_“开头的字符串(前缀是可配置的)。因此,hasRole('IS_AUTHENTICATED_FULLY')无法工作,因为它不是一个角色。出于同样的原因,@RolesAllowed("IS_AUTHENTICATED_FULLY")不会工作。
使用Spring表达式语言时,正确的表达式是:
@PreAuthorize("isAuthenticated()")或者,您可以使用:
@Secured("IS_AUTHENTICATED_FULLY")不需要自定义类-默认情况下,两个投票者都处于启用状态。
发布于 2010-03-27 08:02:25
hasRole('ROLE_USER')是任何经过身份验证的用户的繁体名称。通常,对于不关心人员是否经过身份验证的部分,您将使用ROLE_ANONYMOUS。
(稍后添加:)
我认为您将需要实现一个自定义AccessDecisionVoter,只要参数身份验证的isAuthenticated()为真,并且CONFIG_ATTRIBUTE为ROLE_USER或类似值,它就会始终投票给ACCESS_GRANTED。
在此forum discussion中对此进行了进一步的讨论,给出了web.xml和其他配置的详细信息。
发布于 2010-04-06 23:46:19
在自定义UserDetailService实现中,只需在User对象返回之前将角色"IS_AUTHENTICATED_FULLY“添加到该对象即可。
https://stackoverflow.com/questions/2527198
复制相似问题