博客项目实战
博客项目实战
1.新建blog_parent项目
父工程依赖
1 |
|
子工程依赖
1 |
|
配置
application.properties
1 |
|
配置mybatis-plus分页插件拦截
1 |
|
配置跨域
1 |
|
设置启动类
1 |
|
错误解决方案:
1 |
|
修改注解为:
1 |
|
2. 首页-文章列表
2.1 接口说明
接口url:/articles
请求方式:POST
请求参数:
参数名称 | 参数类型 | 说明 |
---|---|---|
page | int | 当前页数 |
pageSize | int | 每页显示的数量 |
返回数据:
1 |
|
2.2 编码
2.2.1 表结构
1 |
|
1 |
|
1 |
|
2.2.2 对应实体类
dao.pojo
1 |
|
1 |
|
1 |
|
2.2.3 对应mapper
dao.mapper
1 |
|
1 |
|
2.2.4 返回数据
返回格式
dao.vo
1 |
|
封装文章实体返回给前端
1 |
|
vo.params.PageParams
用于封装前端发过来的参数
1 |
|
2.2.5 service
3. 统一异常处理
不管是controller层还是service,dao层,都有可能报异常,如果是预料中的异常,可以直接捕获处理,如果是意料之外的异常,需要统一进行处理,进行记录,并给用户提示相对比较友好的信息。
handle.AllExceptionHandler
1 |
|
4. 登录
4.1 接口说明
接口url:/login
请求方式:POST
请求参数:
参数名称 | 参数类型 | 说明 |
---|---|---|
account | string | 账号 |
password | string | 密码 |
返回数据:
1 |
|
4.2 JWT
登录使用JWT技术。
jwt 可以生成 一个加密的token,做为用户登录的令牌,当用户登录成功之后,发放给客户端。请求需要登录的资源或者接口的时候,将token携带,后端验证token是否合法。
jwt 有三部分组成:A.B.C
A:Header,{“type”:”JWT”,”alg”:”HS256”} 固定
B:playload,存放信息,比如,用户id,过期时间等等,可以被解密,不能存放敏感信息
C: 签证,A和B加上秘钥 加密而成,只要秘钥不丢失,可以认为是安全的。
jwt 验证,主要就是验证C部分 是否合法。
依赖包:
1 |
|
工具类:
1 |
|
错误状态码
1 |
|
4.3. 登录拦截器
每次访问需要登录的资源的时候,都需要在代码中进行判断,一旦登录的逻辑有所改变,代码都得进行变动,非常不合适。
那么可不可以统一进行登录判断呢?
可以,使用拦截器,进行登录拦截,如果遇到需要登录才能访问的接口,如果未登录,拦截器直接返回,并跳转登录页面。
4.3.1 拦截器实现
handle –> LoginInterceptor
1 |
|
4.3.2 使拦截器生效
1 |
|
5.ThreadLocal保存用户信息
com.ep.utils.UserThreadLocal
1 |
|
com.ep.LoginInterceptor
1 |
|
使用:
1 |
|
5.1. ThreadLocal内存泄漏
实线代表强引用,虚线代表弱引用
每一个Thread维护一个ThreadLocalMap, key为使用弱引用的ThreadLocal实例,value为线程变量的副本。
强引用,使用最普遍的引用,一个对象具有强引用,不会被垃圾回收器回收。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不回收这种对象。
如果想取消强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样可以使JVM在合适的时间就会回收该对象。
弱引用,JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。在java中,用java.lang.ref.WeakReference类来表示。
6.使用线程池 更新阅读次数
config.ThreadPoolConfig
1 |
|
使用
1 |
|
7.AOP日志
1 |
|
1 |
|
HttpContextUtils
1 |
|
IPUtils
1 |
|
8.腾讯云文件上传
https://cloud.tencent.com/document/product/436/10199
导入依赖:
1 |
|
ContextUtils 用于获取配置文件内容
1 |
|
腾讯云对象存储工具类
1 |
|
使用:
1 |
|
10. 统一缓存处理(优化)
内存的访问速度 远远大于 磁盘的访问速度 (1000倍起)
1 |
|
1 |
|
使用:
1 |
|
11. Security集成
11..1 添加依赖
1 |
|
config.SecurityConfig
1 |
|
AuthService
1 |
|
SecurityUserService
1 |
|
12.Swagger集成
- 导入依赖
1 |
|
swagger配置
1 |
|