将权限链接到角色

时间:2018-10-05 07:58:08

标签: spring spring-security roles authority

(我已经使用Spring一个月了,如果我的问题很明显,对不起)

我有一个User类,一个Role类和一个Authority类。

用户

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    private String token;

    @Email
    @NotEmpty
    private String email;

    @Length(min = 5)
    @NotEmpty
    @JsonIgnore
    private String password;

    @NotEmpty
    private String firstName;

    @NotEmpty
    private String lastName;

    private String phoneNumber;

    private boolean active;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "user_role", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "role_id"))
    private List<Role> roles;

    // Getters and setters...

}

角色

@Entity
public class Role {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotEmpty
    @Enumerated(EnumType.STRING)
    private ERoleName name;

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "role_authority", joinColumns = @JoinColumn(name = "role_id"), inverseJoinColumns = @JoinColumn(name = "authority_id"))
    private List<Authority> authorities;

    // Getters and setters...
}

权限

@Entity
public class Authority implements GrantedAuthority {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotEmpty
    private String name;

    // Getters and setters...
}

我正在尝试采用以下方案:
-用户具有角色
-角色具有权限

调试代码时,可以看到上述方案有效。
作为示例,我向用户添加了角色“ ROLE_ADMIN”。该角色具有权限“ WRITE_AUTHORITY”和“ READ_AUTHORITY”。
在我的SecurityConfiguration文件中,有以下一行:

.antMatchers("/admin/**").hasAuthority("WRITE_AUTHORITY")

当我尝试访问“ / admin / users / list”时,出现禁止错误。
我读到Spring没有区分角色和权限,所以我的理论是它在用户角色列表内而不是用户角色内寻找“ WRITE_AUTHORITY”。

解决方案
我终于设法使用this link找到了解决方案。
对于@ManyToMany批注(角色和授权类),我必须将fetch属性设置为EAGER:

@ManyToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)

0 个答案:

没有答案