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

ops/2024/9/25 2:05:35/

修改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.ppmy.cn/ops/115564.html

相关文章

代码随想录算法训练营| 454.四数相加II 、 383. 赎金信 、 15. 三数之和 、 18. 四数之和

454.四数相加II 题目 参考文章 思路:设置一个map,用于存储nums1和nums2中相加的和的值以及出现的次数,因为由题目可以知道abcd0,即ab0-(cd),所以遍历nums3和nums4时,看看其中元素的和是否在map中出现过&a…

一六九、go使用泛型封装一个可以应用于任何字段的模糊匹配

需求 针对 json数据里的user_name进行模糊搜索,返回匹配的列 参考数据 [{"id": 122,"name": "sgm_info40_b233 5.5_plus","logo": "https://bj.bcebos.com/v1/iov-recom/car_default.png","user_name"…

python自学笔记

python部分总结 主要记录的是python与之前学的语言的不同之处 函数总结 首字母大写: name.title() 删除右边空格(暂时):name.rstrip() 删除左边空格(暂时):name.lstrip() 删除前缀(暂时):name.removeprefi…

自动化学习3:日志记录及测试报告的生成--自动化框架搭建

一.日志记录 1.配置文件pytest.ini:将日志写入文件方便日后查询或查看执行信息。 需要将文件处理器(文件存放位置/时间/格式等等)添加到配置文件中的【日志记录器】 # pytest.ini [pytest] # ---------------日志文件,需要配合…

JAVA基础语法 day06 继承与多态

一、继承 1.1继承基础知识 使用关键字extend继承,子类可以继承父类的非私有成员,提高代码的复用性。 语法格式: public class 子类 extends 父类{} 设置父类: public class People {private String name;private int age;pr…

梧桐数据库(WuTongDB):MySQL 优化器简介

MySQL 优化器是数据库管理系统中的一个重要组件,用于生成并选择最优的查询执行计划,以提高 SQL 查询的执行效率。它采用了基于代价的优化方法(Cost-Based Optimizer, CBO),通过评估不同查询执行方案的代价,…

解决最短路径问题

文章目录 1. 迷宫中离入口最近的出口(1926)2. 最小基因变化(433)3. 单词接龙(127)4. 为高尔夫比赛砍树(675) 1. 迷宫中离入口最近的出口(1926) 题目描述&…

Python Web 面试题

1 Web 相关 get 和 post 区别 get: 请求数据在 URL 末尾,URL 长度有限制 请求幂等,即无论请求多少次,服务器响应始终相同,这是因为 get 至少获取资源,而不修改资源 可以被浏览器缓存,以便以后…