用户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

这样一来,所有内容复盘结束了。。。。。。

至此,结束。

相关