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