1. 简历描述
个人博客项目 2021.5~2021.6
项目概述:基于Spring Boot框架进行后端开发,采用MySQL数据库存储相关表格数据,并利用MyBatis-Plus进行持久层操作,实现博客文章显示、发布及评论。
功能模块:注册登录、文章列表显示、发布文章、评论、权限管理
具体实现:
使用JWT+Redis实现用户登录验证,提高前端数据和后端验证的安全性,Redis缓存已登录的用户信息,减少数据库的操作,提高了访问速度。
使用ThreadLocal保存用户信息,使得在使用线程内可随时获取用户信息,实现线程隔离。
使用线程池更新阅读次数,避免影响主线程的使用(文章详情即时显示)。
使用Spring Security进行权限认证,实现博主可以删除博客,而其他用户只能浏览。
使用AOP技术实现统一的日志记录、缓存处理。
线程池主要应用在不重要的操作:比如更新阅读数
实现博客系统,游客可以按标签、分类浏览文章,登录用户可以发布评论文章等
的具备用户注册登录、文章列表显示,发布文章,文章评论等功能。
其中,为xxx,使用jwt进行,实现
功能模块:用户注册登录、文章列表显示、发布文章、文章评论、权限管理
使用技术:为了
细分:注册登录
为了xxx,使用技术,实现xxx效果
使用了SpringBoot框架进行开发,数据库采用MySQL,为增加安全性,用户信息管理并提高访问速度,xx使用redis做缓存。
登录验证使用jwt技术进行tokenxxxxx,实现xxx。
为
xxxxxxxx大的流程。
具体技术:
文章图片上传使用七牛云
考虑到之后文章越来越多 分布式id,精度损失问题的解决
在使用ThreadLocal 用户信息的获取,避免内存泄漏
拦截器统一的登录判断
因为是我的个人博客,所以我自己是管理员,别人都是普通用户,可以登录评论或发表,但是没有权限删除。
其他人应该有查询权限
遇到的问题:
并发一致性问题
乐观缓冲模式提高了数据库的并发访问效率
出现线程安全问题,并发过来,数据怎么,然后通过查询,发现MyBatisPlus没有自动xxx,修改了SQL语句为where id=xxx and value=oldValue。
乐观缓冲模式提高了数据库的并发访问效率,但同时也为我们带来了新的课题,那就是要解决并发带来的数据不一致问题。在上文故事中,我们看到张三、李四各浏览图书一次,而更新数据库时仅仅加了1而不是2。如何才能检测出类似问题,并加以规避呢?绝大多数的数据库访问技术都为我们提供了CurrentValue与OldValue(ADO.NET里叫做OriginalValue),通过比对这些值可以帮助我们发现潜在的冲突(注:此方法并不能保证发现所有并发问题,关于更进一步的分析请参考本章第二部分内容)。为了对其有一个感性认识,请完成【实验 2-3 乐观缓冲模式下更新图书阅读次数及相关并发冲突】的步骤3。
https://www.cnblogs.com/zhenyulu/articles/208799.html
token验证 checkToken 从缓存中找到了token,返回成对象
然后在sysUser中进行验证,拿着缓存得到的token的用户对象(里面有id、。。。很多属性),找到了就是通过了显示出来,登陆成功
所以建立adminController时,前面加了个admin来区分拦截
2. 自我项目介绍的点
功能详细描述:
注册登录:实现未登录浏览博客,登录后。。
其中xxx
MyBatis-Plus分页插件
3. 记录细碎
分析三.jwt+redis的登录方案流程:
前端服务器收到用户登录请求,传给后台API网关。
API网关把请求分发到用户服务里进行身份验证。
后台用户服务验证通过,然后从账号信息抽取出userName、
login_time等基本信息组成payload,
进而组装一个JWT,把JWT放入redis(因为退出的时候无法使jwt立即作废,
所以使用保存在redis中,退出的时候delete掉就可以了,
鉴权的时候加一层判断jwt是否在redis里,如果不在则证明jwt已过期作废),
然后包装cookie中返回到前端服务器,这就登录成功了。
前端服务器拿到JWT,进行存储(可以存储在缓存中,
也可以存储在数据库中,如果是浏览器,可以存储在 localStorage 中,
我实现的是放入到cookie里面)
登录后,再访问其他微服务的时候,前端会携带jwt访问后台,后台校验 JWT,
验签通过后,返回相应资源和数据就可以了。