【发布时间】:2015-12-30 18:18:58
【问题描述】:
我正在尝试学习 Spring 安全性。
通过一些教程后,我发现其中一些使用 UserRole(s),而另一些使用实现身份验证的 UserAuthentication 类。 我尝试实现(并且有效)的一个是创建一个自定义 MyUserDetailsService 来实现 UserDetailsService,并像这样授予权限(角色?):
private List<GrantedAuthority> buildUserAuthority(Set<UserRole> userRoles) {
Set<GrantedAuthority> setAuths = new HashSet<GrantedAuthority>();
// Build user's authorities
for (UserRole userRole : userRoles) {
setAuths.add(new SimpleGrantedAuthority(userRole.getRole()));
}
List<GrantedAuthority> Result = new ArrayList<GrantedAuthority>(setAuths);
return Result;
}
我想知道用户角色和 GrantedAuthorities 之间有什么区别(例如,在使用 @PreAuthorize(hasRole...) 与 @PreAuthorize(hasAuthority...) 时),如果他们做同样的事情,为什么两者都存在?或使用一个与另一个相比的优势。
【问题讨论】:
-
角色是权限的“子类型”。如果使用基于角色的访问控制,请使用角色。您还可以授予“can_edit”之类的权限
-
所以角色类似于具有以前缀“ROLE_”开头的“命名约定”的权限,对吗?基于此,如果我使用“can_edit”之类的权限,我应该使用@PreAuthorize("hasAuthority('can_edit')")?
标签: java spring spring-mvc spring-security