学习视频
黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关
登入接口的开发
1、登入主逻辑
2、登入认证
登入逻辑:在 /login 节目登入成功后,才能访问 /list 或/user 等界面。不能直接访问 /list 或/user 等界面。
例如编写 ArticleController 代码
然后打开浏览器 访问 localhost:8080/article/list 会发现能直接访问成功
所以需要登入认证,这就需要借助令牌
jwt 介绍
生成 JWT
① 导入依赖
② 编写代码
③ 验证JWT
登入认证接口的实现
① 导入 工具类
② controller 类实现
登入时生成token,并返回 token (UserController 类里实现)
其他接口(如ArticleController)则需要验证token 才能正常使用(提供服务)
浏览器访问其他接口时会携带token。查看接口文档说明,看看token在哪
这样,用户就只有在登入(或携带token)的情况下,才能访问 localhost:8080/article/list 了。
③ 存在的问题及优化
项目里会有很多很多的controller 类很多的接口,难道每个类在提供服务前都要先获取 token,再验证?这太麻烦了。
所以可以设置一个拦截器,在拦截器里面统一完成验证,验证后才能访问各接口
① 编写拦截器
② 注册拦截器
③ 其他接口直接提供服务
获取用户详细信息
① 请求表头,获取 token,从token 里获取用户名。然后根据用户名查找user
② 存在问题
③ 解决密码问题
在 User 实体类的 password 变量上添加 @JsonIgnore
④ 解决 createTime 问题
问题原因:数据库中的命名和实体类的命名不一致。mybatis 识别不了
解决方案:在yml 文件中配置
⑤ 优化思路
访问 /userInfo 接口前,会访问拦截器。通过了拦截器才能提供服务,问题是在拦截器中已经写过了获取 token,解析token 的代码。能不能复用拦截器里的获取解析token 的代码呢 ?
ThreadLocal
注意:用完记得调用 remove 方法释放
设计思路
每个用户登入时都会分配一个线程,用ThreadLocal set 和 get 可以保证个获取各的,隔离