自学内容网 自学内容网

SpringBoot3 + Vue3 学习 Day 2

学习视频

黑马程序员SpringBoot3+Vue3全套视频教程,springboot+vue企业级全栈开发从基础、实战到面试一套通关

登入接口的开发

1、登入主逻辑

image-20240719110157181

2、登入认证

登入逻辑:在 /login 节目登入成功后,才能访问 /list 或/user 等界面。不能直接访问 /list 或/user 等界面。

例如编写 ArticleController 代码

image-20240719111002461

然后打开浏览器 访问 localhost:8080/article/list 会发现能直接访问成功

image-20240719111058448

所以需要登入认证,这就需要借助令牌

jwt 介绍

image-20240719133947995

生成 JWT

① 导入依赖

image-20240719140513804

② 编写代码

image-20240719140643453

③ 验证JWT

image-20240719141907568

image-20240719141918606

登入认证接口的实现

image-20240719153432278

① 导入 工具类

image-20240719150819072

② controller 类实现

登入时生成token,并返回 token (UserController 类里实现)

image-20240719151023119

其他接口(如ArticleController)则需要验证token 才能正常使用(提供服务)

浏览器访问其他接口时会携带token。查看接口文档说明,看看token在哪

image-20240719152216272

image-20240719153145807

这样,用户就只有在登入(或携带token)的情况下,才能访问 localhost:8080/article/list 了。

③ 存在的问题及优化

项目里会有很多很多的controller 类很多的接口,难道每个类在提供服务前都要先获取 token,再验证?这太麻烦了。

所以可以设置一个拦截器,在拦截器里面统一完成验证,验证后才能访问各接口

image-20240719160734469

① 编写拦截器

image-20240719160417506

② 注册拦截器

image-20240719160514099

③ 其他接口直接提供服务

image-20240719160654812

获取用户详细信息

① 请求表头,获取 token,从token 里获取用户名。然后根据用户名查找user

image-20240720105537147

② 存在问题

image-20240720105750538

③ 解决密码问题

在 User 实体类的 password 变量上添加 @JsonIgnore

image-20240720110528766

④ 解决 createTime 问题

问题原因:数据库中的命名和实体类的命名不一致。mybatis 识别不了

image-20240720110934416

解决方案:在yml 文件中配置

image-20240720111156874

⑤ 优化思路

访问 /userInfo 接口前,会访问拦截器。通过了拦截器才能提供服务,问题是在拦截器中已经写过了获取 token,解析token 的代码。能不能复用拦截器里的获取解析token 的代码呢 ?

ThreadLocal

image-20240720112138846

注意:用完记得调用 remove 方法释放

image-20240720113205854

设计思路

每个用户登入时都会分配一个线程,用ThreadLocal set 和 get 可以保证个获取各的,隔离

image-20240720122854942

⑥ 导入 ThreadLocalUtil 工具类

image-20240720124222498

⑦ 在拦截器里set token,并在使用完后清除资源。

image-20240720124142591

⑧ 在 controller 类中get token

image-20240720124353511


原文地址:https://blog.csdn.net/2401_83694336/article/details/140569502

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!