前言
要想实现动态配置URL权限,就要自定义权限配置
数据库
那总的来说,大概是怎么一个流程呢?
首先先创建对应数据表Bean
创建Bean
public class Role {
private Integer id;
private String name;
private String nameZh;
//省略getter setter
}
public class Menu {
private Integer id;
private String pattern;
private List<Role> roles;
//省略gettet setter
}
public class User implements UserDetails {
private Integer id;
private String username;
private String password;
private Boolean enabled;
private Boolean locked;
private List<Role> roles;
/*
这里装着该用户拥有的角色,一般情况,每一个用户都有对应一个或者几个角色,当然一开始时空的,所以要去数据库查询,并赋值给这个集合, 方便security进行比对判断。
*/
/**
* 获取登录过后用户所拥有的角色信息
* @return 角色信息集合
*/
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
//role集合不能直接给security拿去用,所以创建他能用的对象的集合,将roles集合里的对象放进去
List<SimpleGrantedAuthority> authorities = new ArrayList<>();
for (Role r : roles){
authorities.add(new SimpleGrantedAuthority(r.getName()));
}
return authorities;
}
@Override
public String getPassword() {
return password; //这里的密码会给security来比对前端传过来的密码
}
@Override
public String getUsername() {
return username;
}
/**
* 账户是否未过期
* @return 返回enable属性
*/
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return !locked;
}
/**
* 密码是否未过期
* @return Boolean
*/
@Override
public boolean isCredentialsNonExpired() {
return true;
}
/**
* 账户是否可用
* @return
*/
@Override
public boolean isEnabled() {
return enabled;
}
//省略getter setter
}
创建持久层接口
MenuMapper.xml
这个mapper的getAllMeus方法用来获取每一个url对应需要的一个或几个角色
<mapper namespace="pljandsyx.top.securitydy.mapper.MenuMapper">
<resultMap id="BaseResultMap" type