【发布时间】:2019-06-29 05:09:17
【问题描述】:
我尝试在我的应用程序中扮演角色。但我一直有一条消息。
"status": 403, "error": "Forbidden", "message": "Forbidden",
在数据库中,我有列角色和值 USER 或 ADMIN
休息控制器
@GetMapping(value="/users")
@PreAuthorize("hasRole('ROLE ADMIN')")
public ResponseEntity<List<User>> getAllusers(){
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
System.out.println(authentication.getAuthorities());
List<User> users = userService.findAll();
return new ResponseEntity<List<User>>(users, HttpStatus.OK);
}
如果我遇到@PreAuthorize System.out.println(authentication.getAuthorities()); 正确显示"ROLE ADMIN" 或"ROLE USER"
【问题讨论】:
-
您的角色不是
ROLE_USER,而是USER。hasRole检查给定的权限,但会在其前面加上ROLE_使用hasAuthority代替。 -
我尝试使用 @PreAuthorize("hasRole('ADMIN')") 和 @PreAuthorize("hasRole('ROLE_ADMIN')") 并且一直出现错误 403
-
如前所述,
hasRole在传入的权限前加上ROLE_导致检查您的用户是否拥有ROLE_ADMIN的权限,因为它被命名为ADMIN。请改用hasAuthority。
标签: spring spring-security jwt