【问题标题】:Not able to make users with different roles in springboot [closed]无法在 Spring Boot 中使用户具有不同的角色 [关闭]
【发布时间】:2018-10-03 06:14:40
【问题描述】:

我正在做一个关于 Spring Boot 安全性的项目。我无法让用户具有不同的角色。 就像,我需要一个具有管理员角色的用户和另一个具有用户和管理员角色的用户。 我无法做到这一点。

我已经发布了我的实体类 有人可以帮我看看如何让用户成为管理员。

//用户实体类

    @Entity
    @Table(name="mytable")
    public class User {
        private int id;
        private String username;
        private String firstname;
        private String lastname;
        private int age;
        private String password;
           private Set<Role> roles;

        @Id
        @GeneratedValue(strategy = GenerationType.AUTO)
    ...omitted getters and setters
   @ManyToMany(cascade = CascadeType.ALL,fetch=FetchType.EAGER)
        @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id", referencedColumnName="id"), inverseJoinColumns = @JoinColumn(name = "role_id", referencedColumnName="id"))
        public Set<Role> getRoles() {
            return roles;
        }

        public void setRoles(Set<Role> roles) {
            this.roles = roles;
        }

//角色实体类

@Entity
@Table(name="roles")
public class Role {
    private Long id;
    private String name;
    private Set<User> users;

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    public Long getId() {
        return id;
    }
    @ManyToMany(mappedBy = "roles")
    public Set<User> getUsers() {
        return users;
    }

    public void setUsers(Set<User> users) {
        this.users = users;
    }
}

【问题讨论】:

  • 您应该始终发布您遇到的任何问题或异常,以便其他人可以提供帮助
  • 这是我在 github 上的一个项目,它可以完全满足您的需求,但我有一个用户和角色类。我认为根本问题将是referencedColumnName。这是链接:github.com/OpenPCM/openpcm-server

标签: spring-boot spring-security


【解决方案1】:

初始化您的 Set 并将映射直接移动到用户实体中的角色变量。

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

对角色实体做同样的事情,你可以在 get 方法中进行映射,但 set 必须初始化。

@ManyToMany(mappedBy = "roles")
private Set<User> users = new HashSet<>();

【讨论】:

    猜你喜欢
    • 2020-08-06
    • 2016-09-10
    • 2020-07-19
    • 2014-04-12
    • 2016-11-29
    • 2012-09-23
    • 1970-01-01
    • 2020-12-10
    • 1970-01-01
    相关资源
    最近更新 更多