1、登出需要在main.html添加登出的入口
2、在 ShiroConfig配置类中,添加登出过滤器,注意:登出过滤器必须放在/**拦截所有的前边,不然不会生效,效果不再展示了
3、角色验证需要创建角色表role和用户角色关联表role_user,表内容请自行填充
CREATE TABLE `role` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` VARCHAR(30) DEFAULT NULL COMMENT '角色名',
`desc` VARCHAR(50) DEFAULT NULL COMMENT '描述',
`realname` VARCHAR(20) DEFAULT NULL COMMENT '角色显示名',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='角色表';
CREATE TABLE `role_user` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
`uid` BIGINT(20) DEFAULT NULL COMMENT '用户 id',
`rid` BIGINT(20) DEFAULT NULL COMMENT '角色 id',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='角色用户映射表';
4、在LoginController中添加验证角色的方法,index页面页请自行去创建
//验证登录用户是否包含admin角色,只有有admin角色的用户可访问当前方法
@RequiresRoles("admin")
@GetMapping("userLoginRoles")
public String userLoginRoles(){
return "index";
}
5、在MyRealm中的自定义授权中补全角色授权代码、
//自定义授权方法
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
//创建授权对象
SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
//查询当前用户的所有角色信息
List<String> roles = userService.getAllRoleNameByUserName(principalCollection.getPrimaryPrincipal().toString());
//授权对象填充角色
info.addRoles(roles);
return info;
}
6、userService中的代码就是一个查询所有角色的子查询,代码如下
@Repository
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT NAME FROM role WHERE id IN(SELECT rid FROM role_user WHERE uid IN(SELECT id FROM USER WHERE NAME=#{name}))")
List<String> getAllRoleNameByUserName(String name);
}
7、在main.html添加角色验证的入口
8、验证是否通过
9、创建权限表permissions和角色权限关联表role_ps,表内容请自行填充
CREATE TABLE `permissions` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
`name` VARCHAR(30) DEFAULT NULL COMMENT '权限名',
`info` VARCHAR(30) DEFAULT NULL COMMENT '权限信息',
`desc` VARCHAR(50) DEFAULT NULL COMMENT '描述',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='权限表';
CREATE TABLE `role_ps` (
`id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '编号',
`rid` BIGINT(20) DEFAULT NULL COMMENT '角色 id',
`pid` BIGINT(20) DEFAULT NULL COMMENT '权限 id',
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT='角色权限映射表';
10、在LoginController中添加验证权限的方法,permissions页面页请自行去创建
//验证登录用户是否包含user::add权限,只有有user::add权限的用户可访问当前方法
@RequiresPermissions("user::add")
@GetMapping("userLoginPermissions")
public String userLoginPermissions(){
return "permissions";
}
11、在MyRealm中的自定义授权中补全权限授权代码
12、getAllPermissionsByRoleList中的代码就是一个查询所有权限的子查询,代码如下
//根据角色查找所有权限
@Select({
"<script>",
"select info FROM permissions WHERE id IN ",
"(SELECT pid FROM role_ps WHERE rid IN (",
"SELECT id FROM role WHERE NAME IN ",
"<foreach collection='roles' item='name' open='(' separator=',' close=')'>",
"#{name}",
"</foreach>",
"))",
"</script>"
})
List<String> getAllPermissionsByRoleList(List<String> roles);
13、在main.html添加权限验证的入口
14、验证是否通过