当前位置: 首页 > article >正文

springboot实战学习(6)(用户模块的登录认证)(初识令牌)(JWT)

接着上篇博客学习。上篇博客是在基本完成用户模块的注册接口的开发以及注册时的参数合法性校验的基础上,基本完成用户模块的登录接口的主逻辑。具体往回看了解的链接如下。

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"是比较常见的令牌规范。


http://www.kler.cn/news/314445.html

相关文章:

  • python:给1个整数,你怎么判断是否等于2的幂次方?
  • java.nio.ByteBuffer的 capacity, limit, position, mark
  • 如何打造高效的远程开发团队:最佳实践与挑战
  • 大话C++:第11篇 类的定义与封装
  • Redis——redispluspls库通用命令以及String类型相关接口使用
  • 每日一题--打印闰年
  • 如何使用 Python 连接 MySQL 数据库?什么是 ORM(对象关系映射),如何使用
  • fasterRCNN模型实现飞机类目标检测
  • 果蔬识别系统架构+流程图
  • Hadoop的安装
  • JVM 调优篇7 调优案例2-元空间的优化解决
  • 使用Diskgenius系统迁移
  • 分页插件、代码生成器
  • C#中DataGridView 的 CellPainting 事件的e.Handled = true
  • 银河麒麟V10系统崩溃后的处理
  • 富文本编辑器wangEdittor使用入门
  • string类的模拟实现以及oj题
  • Linux·权限与工具-git与gdb
  • Puppet 部署应用(Puppet deployment application)
  • 《他们的奇妙时光》圆满收官,葛秋谷新型霸总获好评
  • 初始Vitis——ZYNQ学习笔记1
  • 探索微软Copilot Agents:如何通过Wave 2 AI彻底改变工作方式
  • 伊犁linux 创建yum 源过程
  • Java面向对象编程
  • Ubuntu设置笔记本电脑合盖时不挂起
  • el-select组件:选择某个选项触发查询
  • 基于R语言的统计分析基础:使用键盘输入数据
  • charles抓包flutter
  • 数据结构之线性表——LeetCode:328. 奇偶链表,86. 分隔链表,24. 两两交换链表中的节点
  • 基于React+JsonServer+Antddesign的读书笔记管理系统