springboot shiro权限控制讲解01 每天进步百分之一

权限大体分两种,操作权限和数据权限,以下主要讲操作权限的控制
操作权限是一个管理系统的基本功能,最最简单的就是验证用户的帐号和密码了
那既然验证,就有一张用户表了,想起这个就想起的大学老师布置做的学生管理系统了
第一天 学生登录查看自己的基本信息
拿到这个题目然后就回宿舍屁颠屁颠的写代码了
先来个表
用户表 字段id ,帐号,密码
逻辑是 根据用户名和密码去查询是否有这个用户的记录
有就进入主页查看自己的信息了,没有就提示用户名密码错误,重新输入密码
基本上就all 了

第二天老师又来题目了
老师也可以登录查询的是所有学生的信息
那时候瞬间蒙蔽了,这个怎么玩啊?!
后来一看学校的管理系统也有这个,就是在页面登录页加个选项,选择是学生还是老师
知道了个大概,赶紧开干
根据页面的选择类型去查学生的信息
比如type是1就查学生自己的一条
type 是2 就查所有的学生记录
基本上这样就算是all 了,角色的概念出来了

第三天老师又说再系统再加个菜单,只有老师可以看,这个逻辑判断基本跟上面差不多,但是菜单资源是不是也出来了, 怎么命名看你心情(资源也好,菜单也好)

到这里角色基本的三大角就出来了

用户-角色-菜单

那怎么关联这三张表呢?先看下面几种情况
先看用户和角色的关系
一个用户可能有两种以及多种角色,如张三是教务主任,同时兼任老师
一个角色可能有多个用户 如老师这个角色
然后看角色和菜单的关系
一个角色拥有多个菜单,没毛病
一个菜单被多个角色拥有 如学生档案这个菜单,校长老师这两个角色都可以看,没毛病

这样我们就得再加两个表,角色和用户的关系表,角色和菜单的关系表

这样基本通用的操作权限体系就出来了

下面讲下登录功能的逻辑
常见的登录页面
用户名:
密码:
验证码:
记住密码:

登录方法逻辑
1. 验证验证码是否正确
2. 验证用户名和密码是否正确 (密码加密)
3. 是否点击了记住密码
4. 查询用户的角色
5. 查询角色下的操作的资源权限(菜单:操作(增删改))
6. 将用户权限的信息保存到缓存中,减少对数据库的I/O操作
7. 登录成功跳转
8. 退出登录
9. 客户端还有(忘记密码功能,手机邮箱验证,第三方登录等)
大体登录的功能项是这样了,老铁没毛病吧?
接下来主角登场—》Shiro用一个框架最起码要知道的三要素 一,什么玩意? 二 有啥好处? 三 怎么玩?
一. Apache Shiro是Java的一个安全框架
二.
Shiro可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环境。Shiro可以帮助我们完成:认证、授权、加密、会话管理、与Web集成、缓存等。这不就是我们想要的嘛

2. Authentication:身份认证/登录,验证用户是不是拥有相应的身份
Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;
5. Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限;
6. Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通JavaSE环境的,也可以是如Web环境的;
Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率;
3 Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。
三.就是怎么玩了,进入主题

Springboot shiro整合
1. 老套路
引入架包

            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-core</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-spring</artifactId>
                <version>${shiro.version}</version>
            </dependency>
            <dependency>
                <groupId>org.apache.shiro</groupId>
                <artifactId>shiro-ehcache</artifactId>
                <version>${shiro.version}</version>
            </dependency>

2.建表
用户表

CREATE TABLE `sys_user` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `username` varchar(128) NOT NULL COMMENT '用户名',
  `nickname` varchar(128) DEFAULT NULL COMMENT '别名',
  `password` varchar(128) DEFAULT NULL COMMENT '密码',
  `salt` varchar(32) DEFAULT NULL COMMENT '盐',
  `email` varchar(64) DEFAULT NULL COMMENT '邮箱',
  `mobile` varchar(32) DEFAULT NULL COMMENT '手机号码',
  `status` tinyint(4) DEFAULT NULL COMMENT '状态  0:禁用   1:正常',
  `dept_id` bigint(20) DEFAULT NULL COMMENT '部门ID',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  UNIQUE KEY `username` (`username`),
  KEY `email` (`email`),
  KEY `mobile` (`mobile`),
  KEY `status` (`status`),
  KEY `dept_id` (`dept_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COMMENT='系统用户';

角色表

CREATE TABLE `sys_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(128) DEFAULT NULL COMMENT '角色名称',
  `remark` varchar(256) DEFAULT NULL COMMENT '备注',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色';

菜单资源表

CREATE TABLE `sys_menu` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `parent_id` bigint(20) DEFAULT NULL COMMENT '父菜单ID,一级菜单为0',
  `name` varchar(128) DEFAULT NULL COMMENT '菜单名称',
  `url` varchar(256) DEFAULT NULL COMMENT '菜单URL',
  `perms` varchar(500) DEFAULT NULL COMMENT '授权(多个用逗号分隔,如:user:list,user:create)',
  `type` tinyint(4) DEFAULT NULL COMMENT '类型   0:目录   1:菜单   2:按钮',
  `icon` varchar(256) DEFAULT NULL COMMENT '菜单图标',
  `order_num` int(11) DEFAULT NULL COMMENT '排序号',
  PRIMARY KEY (`id`),
  KEY `parent_id` (`parent_id`),
  KEY `type` (`type`)
) ENGINE=InnoDB AUTO_INCREMENT=59 DEFAULT CHARSET=utf8mb4 COMMENT='菜单管理';

用户和角色的关联表

CREATE TABLE `sys_user_role` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) NOT NULL COMMENT '用户ID',
  `role_id` bigint(20) NOT NULL COMMENT '角色ID',
  PRIMARY KEY (`id`),
  KEY `user_id` (`user_id`),
  KEY `role_id` (`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户与角色对应关系';

角色和菜单的关系表

CREATE TABLE `sys_role_menu` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `role_id` bigint(20) NOT NULL COMMENT '角色ID',
  `menu_id` bigint(20) NOT NULL COMMENT '菜单ID',
  PRIMARY KEY (`id`),
  KEY `role_id` (`role_id`),
  KEY `menu_id` (`menu_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='角色与菜单对应关系';

上面所说的基本权限的5张表就建好了.
创建实体以及service,mapper层,在test测试
这玩意复制过来有点多,看源码
https://gitee.com/aliww_411741962/getbang.git
对应这五个表对应的实体先测试一下,没问题接着走下一步

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小海聊智造

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值