我将GrantedAuthorities设为[admin, player, user]
为了测试这个,我在方法中注入了Authentication对象并调用了authentication.getAuthorities().
但是在REST控制器方法时我放了@PreAuthorize("hasRole('ROLE_player')")
我得到了我的REST web的响应服务为403 forbidden.
我定义了自定义角色,我从数据库中挑选。我想在执行任何业务逻辑之前授权REST调用。
尝试使用@Secured
,但仍然无效。
答案 0 :(得分:1)
hasRole的默认前缀是ROLE_。如果没有提供前缀,spring会自动添加它。由于您在数据库中的角色没有以ROLE_为前缀,因此它们与hasRole不匹配。
// will be checking for ROLE_admin, your role in DB is admin
@PreAuthorize("hasRole('admin')")
您可以更新数据库中的角色,以使用ROLE_作为前缀,或者可以更改DefaultWebSecurityExpressionHandler上的spring使用前缀。您还应该能够使用hasAuthority而不是hasRole。 hasAuthority不会为提供的参数添加任何前缀。
@PreAuthorize("hasAuthority('admin')")
http://docs.spring.io/spring-security/site/docs/current/reference/html/el-access.html