如何在 Spring Boot 中注册和检索具有权限的角色?

时间:2021-02-08 07:45:40

标签: spring-boot spring-security

我正在学习弹簧靴。在我的示例应用程序中,我必须提供基于角色的授权和身份验证。我已经设法设置角色,但在数据库中手动设置并访问它。 现在我需要做的是也使用像读写这样的权限。我的设计是用户和角色之间的多对多映射,角色和权限之间的多对多映射。 我不知道如何注册这部分 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 中获取它们? 谢谢:)

0 个答案:

没有答案