在 spring 引导安全性中从数据库访问多个角色
Accessing multiple roles from database in spring boot security
我有 3 个表 USERS(有用户详细信息),ROLES(有角色详细信息),USER_ROLES(映射 user_id 到 role_id)。我想检索用户的角色。当我将它们作为实体导入时,我的代码如下所示:
User.java
package com.eaiesb.entities;
import java.io.Serializable;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.List;
/**
* The persistent class for the USERS database table.
*
*/
@Entity
@Table(name="USERS")
@NamedQuery(name="User.findAll", query="SELECT u FROM User u")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
@Column(name="USER_ID")
private String userId;
private String column1;
private String column2;
private String emailid;
private String gender;
private String name;
private String password;
private BigDecimal sno;
private String status;
//bi-directional many-to-many association to Role
@ManyToMany
@JoinTable(
name="USER_ROLES"
, joinColumns={
@JoinColumn(name="USER_ID")
}
, inverseJoinColumns={
@JoinColumn(name="ROLE_ID")
}
)
private List<Role> roles;
public User() {
}
public String getUserId() {
return this.userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getColumn1() {
return this.column1;
}
public void setColumn1(String column1) {
this.column1 = column1;
}
public String getColumn2() {
return this.column2;
}
public void setColumn2(String column2) {
this.column2 = column2;
}
public String getEmailid() {
return this.emailid;
}
public void setEmailid(String emailid) {
this.emailid = emailid;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public BigDecimal getSno() {
return this.sno;
}
public void setSno(BigDecimal sno) {
this.sno = sno;
}
public String getStatus() {
return this.status;
}
public void setStatus(String status) {
this.status = status;
}
public List<Role> getRoles() {
return this.roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
}
"Role.java" 看起来也很相似。我想在 UserDetails 的 getAuthoritites() 中添加用户的角色,但我做不到,因为它需要 String 但我只能获得列表类型的角色。
尝试使用常规 Java 方法转换为 String,但无济于事。
有人可以帮忙吗?
您的方法 getAuthorities(User)
应该如下所示:
private List<GrantedAuthority> getAuthorities(User user) {
List<GrantedAuthority> result = new ArrayList<>();
for (Role role : user.getRoles() {
result.add(new SimpleGrantedAuthority(role.getName()));
}
return result;
}
我有 3 个表 USERS(有用户详细信息),ROLES(有角色详细信息),USER_ROLES(映射 user_id 到 role_id)。我想检索用户的角色。当我将它们作为实体导入时,我的代码如下所示:
User.java
package com.eaiesb.entities;
import java.io.Serializable;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.List;
/**
* The persistent class for the USERS database table.
*
*/
@Entity
@Table(name="USERS")
@NamedQuery(name="User.findAll", query="SELECT u FROM User u")
public class User implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
@Column(name="USER_ID")
private String userId;
private String column1;
private String column2;
private String emailid;
private String gender;
private String name;
private String password;
private BigDecimal sno;
private String status;
//bi-directional many-to-many association to Role
@ManyToMany
@JoinTable(
name="USER_ROLES"
, joinColumns={
@JoinColumn(name="USER_ID")
}
, inverseJoinColumns={
@JoinColumn(name="ROLE_ID")
}
)
private List<Role> roles;
public User() {
}
public String getUserId() {
return this.userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getColumn1() {
return this.column1;
}
public void setColumn1(String column1) {
this.column1 = column1;
}
public String getColumn2() {
return this.column2;
}
public void setColumn2(String column2) {
this.column2 = column2;
}
public String getEmailid() {
return this.emailid;
}
public void setEmailid(String emailid) {
this.emailid = emailid;
}
public String getGender() {
return this.gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
public BigDecimal getSno() {
return this.sno;
}
public void setSno(BigDecimal sno) {
this.sno = sno;
}
public String getStatus() {
return this.status;
}
public void setStatus(String status) {
this.status = status;
}
public List<Role> getRoles() {
return this.roles;
}
public void setRoles(List<Role> roles) {
this.roles = roles;
}
}
"Role.java" 看起来也很相似。我想在 UserDetails 的 getAuthoritites() 中添加用户的角色,但我做不到,因为它需要 String 但我只能获得列表类型的角色。
尝试使用常规 Java 方法转换为 String,但无济于事。
有人可以帮忙吗?
您的方法 getAuthorities(User)
应该如下所示:
private List<GrantedAuthority> getAuthorities(User user) {
List<GrantedAuthority> result = new ArrayList<>();
for (Role role : user.getRoles() {
result.add(new SimpleGrantedAuthority(role.getName()));
}
return result;
}