用户token认证登陆以及集成redis实现角色权限控制 项目复盘
在我们的学习大全中,我们终于将一整个项目完整的实现了,写完后我们还要做一件很重要的事情,就是复盘,跟着之前的笔记博客,从最开始的步骤开始,再次实现整个项目过程。
一、单纯的实现用户的增删改查。
我们对数据库表单进行重现,数据库名字名为selectFuPan,数据库中各个创建如下:
CREATE TABLE selectFuPan.sys_user( `id` bigint NOT NULL comment 'ID ', `username` varchar(50) comment '用户名', `password` varchar(50) comment '密码', PRIMARY KEY (`id`) ); insert into selectFuPan.sys_user values('1' , 'admmin' , '1') insert into selectFuPan.sys_user values('2' , 'superadmmin' , '11') insert into selectFuPan.sys_user values('3' , 'user' , '111') CREATE TABLE selectFuPan.`sys_role` ( `id` bigint NOT NULL AUTO_INCREMENT comment '角色ID ', `role_name` varchar(50) comment '角色名', `role` varchar(50) comment '角色', PRIMARY KEY (`id`) ); insert into selectFuPan.sys_role values ('1','普通用户' , 'ROLE_USER'); insert into selectFuPan.sys_role values ('2','普通管理员' , 'ROLE_ADMIN'); insert into selectFuPan.sys_role values ('3','超级管理员','ROLE_SUPERADMIN'); CREATE TABLE selectFuPan.`sys_user_role` ( `user_id` bigint default null comment '用户id ', `role_id` bigint default null comment '角色id' ); ALTER table testdemo.`sys_role` comment '用户角色关联表' insert into selectFuPan.sys_user_role values('3' , '1') insert into selectFuPan.sys_user_role values('1' , '2') insert into selectFuPan.sys_user_role values('2' , '3') CREATE TABLE selectFuPan.`sys_role_privilege` ( `role_id` bigint default null comment '角色id ', `privilege_id` bigint default null comment '权限id' ); ALTER table selectFuPan.sys_role_privilege comment '角色权限关联表' insert into selectFuPan.sys_role_privilege values('1' , '1') insert into selectFuPan.sys_role_privilege values('2' , '2') insert into selectFuPan.sys_role_privilege values('3' , '3') insert into selectFuPan.sys_role_privilege values('1' , '4') insert into selectFuPan.sys_role_privilege values('1' , '5') insert into selectFuPan.sys_role_privilege values('1' , '6') CREATE TABLE selectFuPan.`sys_privilege` ( `id` bigint default null comment '权限id ', `privilege_name` varchar(50) default null comment '权限名' , `privilege_url` varchar(50) default null comment '权限访问路径' ); INSERT into selectFuPan.sys_privilege values('1' , '普通用户登陆' , '/sys/user/selectByName') INSERT into selectFuPan.sys_privilege values('2' , '普通管理员登陆' , '/sys/admin/selectById') INSERT into selectFuPan.sys_privilege values('3' , '超级管理员登陆' , '/sys/superAdmin/selectAll')
我们主要要做的工作就是:
1. mybatis配置,完成数据库映射工作
2. spring boot框架搭建,包括controller层、service层、dao层和dto实体类实现
3. 后台数据封装传递到前端的类封装Result和Results的实现。
4. 实现基本的增、删、改和查。
具体的实现见前面文章:
这部分项目复盘代码实现见网址:https://github.com/yeyuting-1314/selectFuPan_selectInsertUpdateDelete.git
二、在实现增删改查的基础上实现分页查询。
这个部分实现要注意的点是:sql语句中的limit参数,一般我们进行分页查询的时候总是通过当前页currentPage和页面大小pageSize对查询的页面进行控制,而sql语句进行查询的时候需要知道查询起始条数startIndex和页面大小pageSize,这时候又没有起始条数startIndex,只知道当前页,这时候,我们就需要找到当前页currentPage和起始条数startIndex之前的关系,这里的currentPage和startIndex有着如下关系,startIndex = (currentPage-1) * pageSize , 这样一来,limit中两个参数我们都拿到了,这样一来,分页查询基本思路也就出来了,在实现这个过程中,我们对前端传过来的两个参数进行了各式各样的封装,例如通过pageBean、Map、String字符串等等形式进行传递,但是,万变不离其中,最后都是要拿到startIndex和pageSize才能实现最后的分页查询,这便是分页查询的整个实现过程。
具体的实现见前面文章:
这部分项目复盘代码实现见网址:https://github.com/yeyuting-1314/selectFuPan_selectByPage.git
三、拦截器和过滤器实现
拦截器和过滤器十分的类似,发挥的作用都是在程序执行前,先进入拦截器或者过滤器中实现自定义逻辑,然后再实现程序本身要实现的代码逻辑。在这里的过滤器和拦截器中,我们利用过滤器和拦截器实现了对程序执行时间的测算,并进行了输出,当然也没有影响到程序的正常执行,只是在程序执行过程中多执行了过滤器和拦截器的代码逻辑。
具体的实现见前面文章: 和
这部分项目复盘代码实现见网址:https://github.com/yeyuting-1314/selectFuPan_filterAndInterceptor.git
四、用户登陆token生成与认证
这个部分主要实现用户登陆时生成token并认证身份,在这里我们就会用到拦截器了,我们一个系统做出来,除了用户注册和登陆的接口是暴露出来的,其余的接口一律不能暴露给外界,我们要把他保护起来,这时就是拦截器发挥作用了,同时我们让身份认证通过的用户访问其他接口。这部分主要实现token生成和相关接口拦截。
具体的实现见前面文章:
这部分项目复盘代码实现见网址:https://github.com/yeyuting-1314/selectFuPan_tokenGenerateAndCheck.git
五、用户登陆token生成与认证之将token存放于redis中
我们日常登陆的时候用到cookie比较多,但是我们想自己生成token并对token放至专门的redis缓存中,这样以便于管理,这时诞生了接下来要实现的代码。
具体的实现见前面文章:
这部分项目复盘代码实现见网址:https://github.com/yeyuting-1314/selectFuPan_tokenAndredis.git
六、对用户登陆注册用到的redis进行封装:
具体的实现见前面文章:
这部分项目复盘代码实现见网址:https://github.com/yeyuting-1314/selectFuPan_tokenAndRedisfengzhuagn.git
七、用户角色权限控制(数据模拟实现)
每个用户对应特定的角色,这里就引入的角色的控制,但是鉴于角色控制实现起来比较复杂,所以我们提前进行一个准备工作,也就是模拟数据库实现用户数据获取。
具体的实现见前面文章:
这部分项目复盘代码实现见网址:https://github.com/yeyuting-1314/privilegeControl.git
八、用户角色权限控制(数据库实现,暂未添加资源表)
数据模拟实现后正式将角色表加入数据库进行联表查询。
具体的实现见前面文章:
这部分项目复盘代码实现见网址:https://github.com/yeyuting-1314/selectFuPan_roleControll.git
九、用户角色权限控制 加入资源表
对访问接口赋予不同权限,并存放于资源表中,进行后续操作。
具体的实现见前面文章:
这部分项目复盘代码实现见网址:https://github.com/yeyuting-1314/selectFuPan_roleControll-privilege.git
十、用户角色权限控制 加入资源表基础上实现token生成集成redis和对资源进行权限分配。
具体的实现见前面文章:
这部分项目复盘代码实现见网址:https://github.com/yeyuting-1314/roleControll-tokenAndRedis.git
这样一来,所有内容复盘结束了。。。。。。
至此,结束。