java - 如何从一组角色中仅获取一个角色

标签 java spring-boot

我正在尝试实现一个简单的 spring 安全项目,其中基本上有用户和角色实体。我有一组角色“管理员”和“用户”。

现在我只想分配“USER”角色以及创建新用户。

我尝试使用列表和集合也遇到同样的问题。

用户实体有 Set<Role>

public class User {

    @Id
    @Column(name = "user_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int user_id;

    @NotNull
    @Column(name = "user_name", unique = true)
    private String userName;

    @NotNull
    @Column(name = "first_name")
    private String firstName;

    @NotNull
    @Column(name = "last_name")
    private String lastName;

    @Column(name = "roles")
    @ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private Set<Role> roles;}

和角色实体:

public class Role {

    }
    @Id
    private int role_id;
    private String role;

}

这是将用户保存到我的数据库的 saveMyUser 方法。 当我使用时:

public void saveMyUser(User user) {
    Set<Role> hash_Set = new HashSet<Role>();
    user.setPassword(encoder().encode(user.getPassword()));
        user.setRoles(new HashSet<>(roleRepository.findAll())); <--- Here
        userRepository.save(user);
    }

user.setRoles(new HashSet<>(roleRepository.findAll()));将所有角色分配给用户,因为我只想为新用户分配“USER”角色。

我试过user.setRoles(new HashSet<>(roleRepository.findByRole(2)));我也尝试过 user.setRoles(new HashSet<>(roleRepository.findByID(2)));出现此错误:无法推断 HashSet<> 的类型参数。

我的数据库中的角色表:

role_id    role
1          ADMIN
2          USER

最佳答案

HashSet 构造函数采用一个 Collection,而不是单个元素。这一行:

user.setRoles(new HashSet<>(roleRepository.findAll()));

使用您的所有角色创建一个新的 HashSet。这一行

user.setRoles(new HashSet<>(roleRepository.findByRole(2)));

尝试在构造函数中使用单个元素创建一个新的 HashSet,这将不起作用,因为 Role 不是 Collection 的实例。

只需获取您的角色,创建一个 HashSet,添加角色,然后设置用户的角色:

Role role = roleRepository.findByRole(2);
Set<Role> roles = new HashSet<>();
roles.add(role);
user.setRoles(roles);

关于java - 如何从一组角色中仅获取一个角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680704/

相关文章:

java - Spring Boot 和 AngularJS

java - Grails 调度错误

java - jni native 函数重载签名

java - 时间戳未写入 Firebase 数据库

java - 如何在java布局中左对齐标签?

java - 如何在类 Controller 中从 api swagger 实现 spring 注释?

java - Spring Cloud 1.0.2 和 SR3 RestTemplate 忽略了我的 ResponseErrorHandler

spring - 在 EAR 项目中集成 Spring Boot

java - Spring Boot YML 和 StandAlone Tomcat 8 服务器

java - Spring Boot Maven 多模块项目 - 单元测试(应用程序上下文)