SpringBoot框架之KOB项目 - 配置Mysql与注册登录模块(中)

修改Spring Security

登录验证模式

传统的验证登录模式

在这里插入图片描述

  • 公开页面:输入url就可以直接访问
  • 授权页面:登录之后才可以访问

Jwt验证模式

  • 容易实现跨域
  • 不需要在服务器端存储

对比于传统模式将所有的sessionId换成jwt token
access token
refresh token

过程:通过一个login页面获取一个token,将其存入浏览器中,当访问授权页面的时候都会带上这个token,先验证这个token(包含userId)是否合法,根据userId到数据库中查询信息,提取到上下文中,访问授权的方法。
以上是原理,如何操作呢

  • 添加jwt依赖,官网搜索jwt 包括 jjwt-api jjwt-impl jjwt-jackson
  • 实现utils.JwtUtil类,为jwt工具,用来创建、解析Jwt token, 如果JwtUtil 爆红,可以降低到 0.11.5 版本试一下。
  • 实现config.filter.JwtAuthenticationTokenFilter类,用来验证jwt token,如果验证成功,则将User信息注入上下文中
  • 配置config.SecurityConfig类,放行登录、注册等接口
    在这里插入图片描述

编写API

一般步骤:service里面接口及其实现类,然后编写controller里面的类,

  • 将数据库中的id域变为自增
    • 在数据库中将id列变为自增
    • pojo.User类中添加注解:@TableId(type = IdType.AUTO)
  • 实现/user/account/token/:验证用户名密码,验证成功后返回jwt token(令牌)
  • 实现/user/account/info/:根据令牌返回用户信息
  • 实现/user/account/register/:注册账号

过程是这样的:首先写接口,然后写接口的实现类(实现类之前的接口),然后编写Controller

需要测试,可以学习一下postman或者直接使用前端进行测试

这里使用之前写好的前端进行测试

知识点的补充学习

HTTP协议中的GET和POST是两种常用的请求方法,它们在Web开发中有着不同的用途和特点:

Post请求和Get请求

  1. GET请求

    • 用途:用于请求从服务器获取数据。通常用于查询字符串参数,如搜索或过滤数据。
    • 数据传输:数据通过URL传递,附加在请求的URL之后。
    • 安全性:由于数据在URL中可见,因此不安全,不应用于传输敏感信息。
    • 缓存:GET请求可以被缓存,这意味着相同的请求可以快速响应,提高效率。
    • 书签:可以被保存为书签。
    • 历史:可以在浏览器历史中保留。
    • 长度限制:URL长度有限制,因此GET请求传输的数据量有限。
  2. POST请求

    • 用途:用于向服务器提交数据,通常用于表单提交或上传文件。
    • 数据传输:数据在请求体(body)中传输,不在URL中。
    • 安全性:比GET更安全,因为数据不在URL中显示。
    • 缓存:POST请求不会被缓存。
    • 书签:不能被保存为书签。
    • 历史:不会在浏览器历史中保留。
    • 长度限制:没有长度限制,可以传输大量数据。

在选择使用GET还是POST时,通常考虑以下因素:

  • 如果需要获取数据,并且数据量不大,可以使用GET。
  • 如果需要向服务器提交数据,或者数据量较大,应该使用POST。
  • 对于敏感数据,应避免使用GET,因为它可能会在URL中暴露数据。

在实际开发中,还应考虑其他HTTP方法,如PUT(更新资源)、DELETE(删除资源)、PATCH(部分更新资源)等,根据具体需求选择合适的方法。

jwt的介绍

JSON Web Token(JWT)是一种用于在网络应用环境间传递声明的紧凑、URL安全的开放标准(RFC 7519)。它被设计为紧凑且安全的,适用于分布式站点的单点登录(SSO)场景。JWT的声明通常用于在身份提供者和服务提供者间传递被认证的用户身份信息,以便从资源服务器获取资源,也可以增加一些额外的业务逻辑所需的声明信息。JWT可以被用于认证,也可以被加密。
JWT由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。头部包含两部分信息:令牌的类型(通常是JWT)和使用的加密算法(如HMAC SHA256或RSA)。载荷部分存放有效信息,包括注册的声明(如iss、exp、sub、aud等)、公共的声明和私有的声明。签名部分用于验证发送请求者身份,由前两部分加密形成。JWT的优点包括体积小、传输速度快,可以通过URL、POST参数或HTTP头部等方式传输,支持跨域验证,适用于单点登录,且由于其自包含性,可以有效减少服务器查询数据库的次数。然而,JWT也有其局限性,如不能存储敏感信息,因为其载荷是使用Base64编码的,没有加密,且JWT一旦签发,不能被撤销,只能等到过期。在实际应用中,JWT可以用于身份验证、信息交换、单点登录和微服务架构等场景。为了保证安全性,建议不要在JWT中存放敏感信息,设置合理的有效期,确保传输过程安全,并考虑在应用程序层面增加额外的安全措施,如黑名单机制等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/54749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分发饼干00

题目链接 分发饼干 题目描述 注意点 1 < g[i], s[j] < 2^31 - 1目标是满足尽可能多的孩子&#xff0c;并输出这个最大数值 解答思路 可以先将饼干和孩子的胃口都按升序进行排序&#xff0c;随后根据双指针 贪心&#xff0c;将当前满足孩子胃口的最小饼干分配给该孩…

Android开发高频面试题之——Android篇

Android开发高频面试题之——Android篇 Android开发高频面试题之——Java基础篇 Android开发高频面试题之——Kotlin基础篇 Android开发高频面试题之——Android基础篇 1. Activity启动模式 standard 标准模式,每次都是新建Activity实例。singleTop 栈顶复用。如果要启动的A…

关于预处理的一系列问题

1. 预定义符号 C语⾔设置了⼀些预定义符号&#xff0c;可以直接使⽤&#xff0c;预定义符号也是在预处理期间处理的。 2. #define定义常量 #define name stuff 如果定义的 stuff过⻓&#xff0c;可以分成⼏⾏写&#xff0c;除了最后⼀⾏外&#xff0c;每⾏的后⾯都加⼀个反…

win10下使用docker、k8s部署java应用

在上一篇文章 Windows10上Docker和Kubernetes的安装 中&#xff0c;已经介绍了在 Windows10上安装Docker和Kubernetes &#xff0c;有了这个环境基础之后&#xff0c;就可以用来部署服务了 在项目目录下新建Dockfile文件&#xff0c;内容如下&#xff08;请根据实际情况调整&am…

前端——阿里图标的使用

阿里图标 将小图标定义成字体&#xff0c;通过引入字体的方式来展示这些图标 1.打开阿里图标库 https://www.iconfont.cn/ 2.登录 / 注册一个账号 3.选中你需要使用的图标 并且把它加入购物车 4.全部选择完之后 点击右上角 购物车 然后下载代码 5.解压后你下载的文…

Web+Mysql——MyBatis

MyBatis 目标 能够完成Mybatis代理方式查询数据能够理解Mybatis核心配置文件的配置 1&#xff0c;Mybatis 1.1 Mybatis概述 1.1.1 Mybatis概念 MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由…

面试面经|大模型算法岗常见面试题100道

本文提供了一份全面的大模型算法岗位面试题清单&#xff0c;包括基础理论、模型结构、训练微调策略、应用框架、分布式训练和模型推理等方面的知识点&#xff0c;旨在帮助求职者准备相关技术面试。 一、基础篇 1、目前主流的开源模型体系有哪些&#xff1f; Transformer体系&a…

neo4j(spring) 使用示例

文章目录 前言一、neo4j是什么二、开始编码1. yml 配置2. crud 测试3. node relation 与java中对象的关系4. 编码测试 总结 前言 图数据库先驱者 neo4j&#xff1a;neo4j官网地址 可以选择桌面版安装等多种方式,我这里采用的是docker安装 直接执行docker安装命令: docker run…

zabbix“专家坐诊”第256期问答

原作者&#xff1a;乐维社区 原文链接&#xff1a;https://forum.lwops.cn/questions 问题一 Q&#xff1a;zabbix 6.4.18版本的&#xff0c;使用zabbix_agentd2监控mysql数据库&#xff0c;只能在界面配置mysql的相关信息吗&#xff1f;这个在zabbix表里面是明文存储的&#x…

力扣反转链表系列【25. K 个一组翻转链表】——由易到难,一次刷通!!!

力扣《反转链表》系列文章目录 刷题次序&#xff0c;由易到难&#xff0c;一次刷通&#xff01;&#xff01;&#xff01; 题目题解206. 反转链表反转链表的全部 题解192. 反转链表 II反转链表的指定段 题解224. 两两交换链表中的节点两个一组反转链表 题解325. K 个一组翻转…

在python爬虫中xpath方式提取lxml.etree._ElementUnicodeResult转化为字符串str类型

简单提取网页中的数据时发现的 当通过xpath方式提取出需要的数据的text文本后想要转为字符串&#xff0c;但出现lxml.etree._ElementUnicodeResult的数据类型不能序列化&#xff0c;在网上查找到很多说是编码问题Unicode编码然后解码什么的&#xff1b;有些是(导入的xml库而不…

Java : 图书管理系统

图书管理系统的作用&#xff1a; 高效的图书管理 图书管理系统通过自动化管理&#xff0c;实现了图书的采编、编目、流通管理等操作的自动化处理&#xff0c;大大提高了图书管理的效率和准确性。 工作人员可以通过系统快速查找图书信息&#xff0c;实时掌握图书的借还情况&…

【Java】Java中接口与内部类详解

目录 引言 一、接口&#xff08;Interface&#xff09; 1.1 接口的定义 1.1.1 接口的特点 1.2 接口的实现 1.3 接口的继承 1.4 接口的注意事项 1.5 代码示例 二、内部类&#xff08;Inner Class&#xff09; 2.1 内部类特点 2.2 成员内部类 2.2.1 对象的创建 2.…

红外热成像应用场景!

1. 电力行业 设备故障检测&#xff1a;红外热成像仪能够检测电气设备&#xff08;如变压器、电线接头&#xff09;的过热现象&#xff0c;及时发现并定位故障点&#xff0c;预防火灾等安全事故的发生。 水电站查漏&#xff1a;在水电站中&#xff0c;红外热成像仪可用于快速查…

【LLM学习之路】9月22日 第九天 自然语言处理

【LLM学习之路】9月22日 第九天 直接看Transformer 第一章 自然语言处理 自然语言处理发展史 只要看的足够多&#xff0c;未必需要理解语言 统计语言模型发展史 统计语言模型&#xff1a; 判断一个句子是否合理&#xff0c;就计算这个句子会出现的概率 缺点是句子越长越…

掌握Python办公自动化,轻松成为职场高效达人

大家好&#xff0c;今天我们来聊聊为什么要学习和了解Python办公自动化&#xff1f; "自动化应用于高效运营将提高效率" ——比尔盖茨 在日常的工作中&#xff0c;存在很多重复性、规律性的工作。虽然现在有很多办公软件能够在一些方面提高工作效率&#xff0c;但无法…

基于FPGA+GPU异构平台的遥感图像切片解决方案

随着遥感和成像技术的不断进步和普及&#xff0c;获取大量高分辨率的遥感图像已成为可能。这些大规模的遥感图像数据需要进行有效的处理和分析&#xff0c;以提取有用的信息&#xff0c;进行进一步的应用。遥感图像切片技术应运而生&#xff0c;该技术可以将大型遥感图像分割成…

python-在PyCharm中使用PyQt5

文章目录 1. 安装 PyQt5 和QtTools2. QtDesigner 和 PyUIC 的环境配置2.1 在 PyCharm 添加 Create Tools2.2 添加 PyUIC 工具 3. 创建ui界面4. 使用python调用ui界面参考文献 1. 安装 PyQt5 和QtTools QT 是最强大的 GUI 库之一&#xff0c;PyQt5 是 Python 绑定 QT5 应用的框…

增强GPT4v的Grounding能力,video-level

开源链接&#xff1a; appletea233/AL-Ref-SAM2: AL-Ref-SAM 2: Unleashing the Temporal-Spatial Reasoning Capacity of GPT for Training-Free Audio and Language Referenced Video Object Segmentation (github.com) In this project, we propose an Audio-Language-Refe…

手写数字识别案例分析(torch,深度学习入门)

在人工智能和机器学习的广阔领域中&#xff0c;手写数字识别是一个经典的入门级问题&#xff0c;它不仅能够帮助我们理解深度学习的基本原理&#xff0c;还能作为实践编程和模型训练的良好起点。本文将带您踏上手写数字识别的深度学习之旅&#xff0c;从数据集介绍、模型构建到…