接着上篇博客学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上,基本完成用户模块的登录接口的主逻辑。具体往回看了解的链接如下。
springboot实战学习笔记(5)(用户登录接口的主逻辑)-CSDN博客文章浏览阅读503次,点赞16次,收藏8次。这篇博客主要完成用户模块的登录接口的主逻辑开发。其中用到了注册接口开发时的参数校验框架(validation)、全局异常处理器。关于"jwt token令牌"会在后面博客笔记中学习。https://blog.csdn.net/m0_74363339/article/details/142342446?spm=1001.2014.3001.5501
- 但是有一个问题。我们有UserController,肯定以后开发接口还有其它的Controller。
- 比如有ArticleController,并且里面提供了"/list","列表查询"的接口。如果将来用户并没有登录,它就不能访问到ArticleController里面的列表查询接口。
- 应该是浏览器先访问"login"接口,完成登录之后,才能访问其它的接口。所以其它接口就要在服务器访问之前,需要对用户的登录状态进行应该一个检查。检查过程就叫"登录认证"。
目录
一、测试
(1)第一步。创建类,添加注解。
(2)第二步。添加方法,添加注解。
(3)重新启动该工程。去浏览器测试接口(测试前面提到的问题)。
二、修改与完善
(1)问题与思路
(2)令牌
(I)基本介绍
(II)基本要求
(III)web开发常用令牌规范
一、测试
(1)第一步。创建类,添加注解。
- IDEA中controller包下创建一个类"ArticleController"。
- 并且类上添加一个注解@RestController。再在下面添加一个注解@RequestMapping("/article")。
(2)第二步。添加方法,添加注解。
- 提供一个方法"list()"。添加注解@GetMapping("/list")
- 这里的返回值是Result对象,且类型是<String>。
- 这里先只是做测试,后继完善,返回的内容是一个字符串"所有的文章数据"。
package com.feisi.controller; import com.feisi.pojo.Result; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @Title: ArticleController * @Author HeYouLong * @Package com.feisi.controller * @Date 2024/9/19 下午5:33 * @description: */ @RestController @RequestMapping("/article") public class ArticleController { @GetMapping("/list") public Result<String> list(){ return Result.success("所以的文章数据..."); } }
(3)重新启动该工程。去浏览器测试接口(测试前面提到的问题)。
- 发现在没有登录的情况下,直接访问该接口,它可以,这是不对的。地址:"localhost:8080/article/list"
- 所以需要对这个程序进行添加登录认证的功能!!
二、修改与完善
(1)问题与思路
- 上面的问题:"未登录的情况下,依旧可以访问到其它接口"。
- 需要其它接口在提供服务之前,需要检查登录状态。
- 我们需要借助于"令牌"的技术。也就是浏览器访问登录接口,如果登录成功后,需要在后台生成一个令牌,并且响应给浏览器。当浏览器再去访问其它接口时,就要把这个令牌携带一起去访问才可以。而其它接口看到浏览器是携带令牌时,且令牌是合法的,就正常的提供所有服务,否则不提供。
- 程序中的令牌,其实起到的就是"身份识别"的作用。而程序中的令牌是一段字符串。
(2)令牌
(I)基本介绍
- 令牌就是一段字符串。然而不同的是令牌是有要求的。
(II)基本要求
- 第一,承载业务数据,减少后续请求查询数据库的次数。
(举个例子:系统中,经常需要知道本次操作是哪个用户操作的。将来方便回收等等。如果每次请求都去数据库查询该用户的信息,它会影响性能。如果将用户信息放进令牌中,然后每次请求浏览器都会携带这个令牌。所以需要用户的数据,就可以从令牌中获取,这样就能减少数据库查询的次数。)
- 令牌需要进行防篡改。保证信息的合法性和有效性。(令牌需要有防伪功能!!)
(III)web开发常用令牌规范
- 目前市面上满足令牌规范的有很多。但是市场在web开发中,"JWT"是比较常见的令牌规范。