我正在学习弹簧靴。在我的示例应用程序中,我必须提供基于角色的授权和身份验证。我已经设法设置角色,但在数据库中手动设置并访问它。
现在我需要做的是也使用像读写这样的权限。我的设计是用户和角色之间的多对多映射,角色和权限之间的多对多映射。
我不知道如何注册这部分 user.setRoles(并设置权限)。以及如何检查这些权限以及 WebSecurityConfigurerAdapter 中的角色,即 .csrf().disable().authorizeRequests().mvcMatchers(HttpMethod.GET,"/api/people").hasAnyRole("USER","ADMIN").mvcMatchers(HttpMethod.POST,"/api/people").hasRole("ADMIN")
虽然我知道它有获取权限的方法,但我无法注册和正确使用它。
这是我的代码
package com.zen.model;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
@Entity
public class Admin implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long adminid;
public Long getId() {
return adminid;
}
public void setId(Long id) {
this.adminid = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
public boolean isTokenExpired() {
return tokenExpired;
}
public void setTokenExpired(boolean tokenExpired) {
this.tokenExpired = tokenExpired;
}
private String firstName;
private String lastName;
private String email;
private String password;
private boolean enabled;
private boolean tokenExpired;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="user_role",joinColumns = @JoinColumn(name ="admin_id",referencedColumnName = "adminid"),inverseJoinColumns = @JoinColumn(name= "role_id",referencedColumnName = "rid"))
private Set<Role> roles;
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
}
package com.zen.model;
import java.io.Serializable;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
import org.springframework.context.annotation.Scope;
import org.springframework.security.core.GrantedAuthority;
@Entity
//@Table(name = "role")
//@Scope("prototype")
public class Role implements GrantedAuthority,Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
public int getEid() {
return rid;
}
public void setEid(int eid) {
this.rid = eid;
}
// public String getType() {
// return name;
// }
// public void setType(String type) {
// this.name = type;
// }
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int rid=1;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToMany(mappedBy = "roles")
private Set<User> users;
@ManyToMany(mappedBy = "roles")
private Set<SuperAdmin> superAdmin;
public Set<SuperAdmin> getSuperAdmin() {
return superAdmin;
}
public void setSuperAdmin(Set<SuperAdmin> superAdmin) {
this.superAdmin = superAdmin;
}
public Set<Admin> getAdmin() {
return admin;
}
public void setAdmin(Set<Admin> admin) {
this.admin = admin;
}
@ManyToMany(mappedBy = "roles")
private Set<Admin> admin;
public Set<User> getUsers() {
return users;
}
public void setUsers(Set<User> users) {
this.users = users;
}
private String name;
@ManyToMany(fetch=FetchType.EAGER)
@JoinTable(name="role_privileges",joinColumns = @JoinColumn(name ="rid",referencedColumnName = "rid"),inverseJoinColumns = @JoinColumn(name= "privilege_id"))
private Set<Privilege> privileges;
public Set<Privilege> getPrivileges() {
return privileges;
}
public void setPrivileges(Set<Privilege> privileges) {
this.privileges = privileges;
}
@Override
public String getAuthority() {
// TODO Auto-generated method stub
System.out.print("authority");
System.out.print(name);
return name;
}
}
package com.zen.model;
import java.io.Serializable;
import java.util.Collection;
import java.util.Set;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
@Entity
public class Privilege implements Serializable {
/**
*
*/
private static final long serialVersionUID = 752219249055564923L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long privilege_id;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Set<Role> getRoles() {
return roles;
}
public void setRoles(Set<Role> roles) {
this.roles = roles;
}
@ManyToMany(mappedBy = "privileges")
private Set<Role> roles;
}
那么如何设置它们并在 UserDetailService 中获取它们? 谢谢:)