如何从集合中获取对象?

ghhkc1vu  于 2021-07-04  发布在  Java
关注(0)|答案(1)|浏览(489)

我几天前开始学习 Spring 安全。在两个教程中发现了相同的代码,我不确定它是如何工作的。我意识到这只是简单的java,但我似乎不理解它。

  1. public Set<SimpleGrantedAuthority> getGrantedAuthority(){
  2. Set<SimpleGrantedAuthority> permissions = getPermissions().stream()
  3. .map(permission -> new SimpleGrantedAuthority(permission.getPermission()))
  4. .collect(Collectors.toSet());
  5. permissions.add(new SimpleGrantedAuthority("ROLE_" + this.name()));
  6. return permissions;
  7. }

根据我对代码的理解,使用stream()我用simplegrantedauthority对象填充集合,这很好,但是这行是怎么工作的呢 permissions.add(new SimpleGrantedAuthority("ROLE_" + this.name())); ? 整个方法应该只返回给定角色的权限,但我不知道如何在返回的方法中只返回几个正确的权限。
方法调用:

  1. protected UserDetailsService userDetailsService() {
  2. UserDetails annaS = User.builder()
  3. .username("annasmith")
  4. .password(passwordEncoder.encode("password"))
  5. .authorities(STUDENT.getGrantedAuthority())
  6. .build();
  7. }

角色枚举:

  1. public enum ApplicationUserRole {
  2. STUDENT(Sets.newHashSet()),
  3. ADMIN(Sets.newHashSet(COURSE_READ,COURSE_WRITE, STUDENT_WRITE, STUDENT_READ)),
  4. ADMINTRAINEE(Sets.newHashSet(COURSE_READ,STUDENT_READ));
  5. private final Set<ApplicationUserPermission> permissions;
  6. ApplicationUserRole(Set<ApplicationUserPermission> permissions) {
  7. this.permissions = permissions;
  8. }
  9. public Set<ApplicationUserPermission> getPermissions() {
  10. return permissions;
  11. }
  12. public Set<SimpleGrantedAuthority> getGrantedAuthority(){
  13. Set<SimpleGrantedAuthority> permissions = getPermissions().stream()
  14. .map(permission -> new SimpleGrantedAuthority(permission.getPermission()))
  15. .collect(Collectors.toSet());
  16. permissions.add(new SimpleGrantedAuthority("ROLE_" + this.name()));
  17. return permissions;
  18. }
  19. }

权限枚举:

  1. public enum ApplicationUserPermission {
  2. STUDENT_READ("student:read"),
  3. STUDENT_WRITE("student:write"),
  4. COURSE_READ("course:read"),
  5. COURSE_WRITE("course:write");
  6. private final String permission;
  7. ApplicationUserPermission(String permission) {
  8. this.permission = permission;
  9. }
  10. public String getPermission() {
  11. return permission;
  12. }
  13. }

如果有什么需要分析的话,如果有人能给我详细解释一下,我将不胜感激。

yhuiod9q

yhuiod9q1#

在springsecurity中,您可以填写userdetails authorities 有角色和/或特权。处理这些信息的方式是您自己的选择,所以引用行所做的只是添加 ApplicationUserRole 一起在同一个地方的特权。
对于这个框架来说,差别是最小的——它基本上以完全相同的方式处理这些问题。
spring安全框架并没有就我们应该如何使用这个概念给出任何指导,因此选择完全是针对具体实现的。
您可以在spring安全配置中使用它。
如:

  1. @Override
  2. protected void configure(HttpSecurity http) throws Exception {
  3. // ...
  4. .antMatchers("/protectedbyrole").hasRole("STUDENT")
  5. .antMatchers("/protectedbyauthority").hasAuthority("student:read")
  6. // ...
  7. }

阅读更多https://www.baeldung.com/spring-security-granted-authority-vs-role.

相关问题