快速掌握shiro安全框架(四)之登出、角色验证、权限验证

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、验证是否通过

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值