我几天前开始学习 Spring 安全。在两个教程中发现了相同的代码,我不确定它是如何工作的。我意识到这只是简单的java,但我似乎不理解它。
public Set<SimpleGrantedAuthority> getGrantedAuthority(){
Set<SimpleGrantedAuthority> permissions = getPermissions().stream()
.map(permission -> new SimpleGrantedAuthority(permission.getPermission()))
.collect(Collectors.toSet());
permissions.add(new SimpleGrantedAuthority("ROLE_" + this.name()));
return permissions;
}
根据我对代码的理解,使用stream()我用simplegrantedauthority对象填充集合,这很好,但是这行是怎么工作的呢 permissions.add(new SimpleGrantedAuthority("ROLE_" + this.name()));
? 整个方法应该只返回给定角色的权限,但我不知道如何在返回的方法中只返回几个正确的权限。
方法调用:
protected UserDetailsService userDetailsService() {
UserDetails annaS = User.builder()
.username("annasmith")
.password(passwordEncoder.encode("password"))
.authorities(STUDENT.getGrantedAuthority())
.build();
}
角色枚举:
public enum ApplicationUserRole {
STUDENT(Sets.newHashSet()),
ADMIN(Sets.newHashSet(COURSE_READ,COURSE_WRITE, STUDENT_WRITE, STUDENT_READ)),
ADMINTRAINEE(Sets.newHashSet(COURSE_READ,STUDENT_READ));
private final Set<ApplicationUserPermission> permissions;
ApplicationUserRole(Set<ApplicationUserPermission> permissions) {
this.permissions = permissions;
}
public Set<ApplicationUserPermission> getPermissions() {
return permissions;
}
public Set<SimpleGrantedAuthority> getGrantedAuthority(){
Set<SimpleGrantedAuthority> permissions = getPermissions().stream()
.map(permission -> new SimpleGrantedAuthority(permission.getPermission()))
.collect(Collectors.toSet());
permissions.add(new SimpleGrantedAuthority("ROLE_" + this.name()));
return permissions;
}
}
权限枚举:
public enum ApplicationUserPermission {
STUDENT_READ("student:read"),
STUDENT_WRITE("student:write"),
COURSE_READ("course:read"),
COURSE_WRITE("course:write");
private final String permission;
ApplicationUserPermission(String permission) {
this.permission = permission;
}
public String getPermission() {
return permission;
}
}
如果有什么需要分析的话,如果有人能给我详细解释一下,我将不胜感激。
1条答案
按热度按时间yhuiod9q1#
在springsecurity中,您可以填写userdetails
authorities
有角色和/或特权。处理这些信息的方式是您自己的选择,所以引用行所做的只是添加ApplicationUserRole
一起在同一个地方的特权。对于这个框架来说,差别是最小的——它基本上以完全相同的方式处理这些问题。
spring安全框架并没有就我们应该如何使用这个概念给出任何指导,因此选择完全是针对具体实现的。
您可以在spring安全配置中使用它。
如:
阅读更多https://www.baeldung.com/spring-security-granted-authority-vs-role.