无法让用户在springboot中扮演不同的角色

时间:2018-10-03 06:14:40

标签: spring-boot spring-security

我正在做一个关于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;
    }
}

1 个答案:

答案 0 :(得分:0)

初始化您的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<>();