Spring Security——04,认证_校验

认证_校验

    • 一、认证过滤器
    • 二、配置过滤器
    • 三、测试过滤器
      • 3.1 登录接口
      • 3.2 非登录接口
      • 3.3 结果
    • 一键三连有没有捏~~

一、认证过滤器

创建一个filter包,创建一个过滤器

在这里插入图片描述代码如下:

@Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {@Autowiredprivate RedisTemplate redisTemplate;@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)throws ServletException, IOException {//获取tokenString token = request.getHeader("token");if (!StringUtils.hasText(token)) {//放行filterChain.doFilter(request, response);return;}//解析tokenString userid;try {Claims claims = JwtUtil.parseJWT(token);userid = claims.getSubject();} catch (Exception e) {e.printStackTrace();throw new RuntimeException("token非法");}//从redis中获取用户信息String redisKey = "login:" + userid;LoginUser loginUser = (LoginUser) redisTemplate.opsForValue().get(redisKey);if (Objects.isNull(loginUser)) {throw new RuntimeException("用户未登录");}//存入SecurityContextHolder//TODO 获取权限信息封装到Authentication中UsernamePasswordAuthenticationToken authenticationToken =new UsernamePasswordAuthenticationToken(loginUser, null, null);SecurityContextHolder.getContext().setAuthentication(authenticationToken);//放行filterChain.doFilter(request, response);}
}

一些疑问解答:

为什么过滤器不实现filter呢?

因为在不同的servlet版本当中,可能会导致一个请求过来,会被调用多次,所以我们使用spring为我们提供的一个实现类OncePerRequestFilter实际上对于认证这样的有关安全操作每个请求也应该是只应该执行一次

为什么使用三个参数的构造方法?

在这里插入图片描述


一种是有两个参数的:传递用户名跟密码就可以了
一种是有三个参数的:在三个参数的里面,它有一个set方法,authenticate获取真实性,代表你是否是一个已认证的状态,流程走到这里,肯定是已经认证过的了,所以使用有三个参数的方法。第一个传的是用户的信息,第二个是null,第三个是权限的信息,目前还没有权限信息,所以也写null

SpringSecurity后面执行的过滤器会去SecurityContextHolder中获取信息,所以在放行之前要将信息存入SecurityContextHolder

二、配置过滤器

完成过滤器之后,我们要去指定一下过滤器的位置,在哪里进行过滤,我们把它放在UsernamePasswordAuthenticationFilter之前的位置

在这里插入图片描述代码如下:

在这里插入图片描述

三、测试过滤器

3.1 登录接口

然后,我们先使用我们的postman测试一下登录接口

现在,我们的登录接口,请求头是没有token的

在这里插入图片描述看一下,我们的idea,已经到断点这里了

下一步,没有token,所以为null

在这里插入图片描述
然后就直接让他放行就可以了

在这里插入图片描述在这里插入图片描述

3.2 非登录接口

用一个不是登录的接口的测试一下

在这里插入图片描述
然后,一直放行,放行到后面,肯定是一个认证失败的结果

在这里插入图片描述
认证失败

在这里插入图片描述

我们想让他访问成功,就把之前登录成功的token拿过来,作为请求头,就可以了。

在这里插入图片描述

3.3 结果

项目重新启动了之后,老token就不能登录了,必须重新登录,要新的token

老token不能访问,新登录的token可以访问

老token登录报错了,报的是语法错误,乱码了

一键三连有没有捏~~

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

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

相关文章

LeetCode | 数组 | 双指针法 | 27. 移除元素【C++】

题目链接 1. 题目描述 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑…

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改

在集群中使用deepspeed如果端口被占用可以使用deepspeed参数更改 这一次G老师不好使了 在集群中使用deepspeed默认的端口号29500被占用,显示更改居然不起作用 G老师给的方法也不好使 #!/bin/bash MASTER_ADDRlocalhost MASTER_PORT29501 # 选择一个未被占用的端…

Android+OnnxRuntime+Opencv+Onnx模型操作图片擦除多余内容

今年来AI的发展非常迅速,在工业、医疗等等行业逐渐出现相应的解决方案,AI也逐渐成为各行业基础设施建设重要的一环,未来发展的大趋势,不过这也需要一个漫长的过程,需要很多技术型人才加入其中,除了工业设施的基础建设,在娱乐方向也有很多有趣的能力,不如图片/视频换背景…

mysql 运算符 语句 字符集 校队集

mysql 运算符 使用select语句可以输出运算的结果 mysql标识符不区分大小写 算数运算符 1./除法 得到的结果是一个小数 %是整数,省略小数 2、除以0不会报错,得到的结果是 null 3.数宇和字符串做加法运算,并不会拼接 比较运算符 1.mysql里面的=是比较运算符,而不是赋值运算…

lora pingpang系统 4

1 深入了解LoRa技术原理 1.1 LoRa扩频通信原理 1.1.1 模拟无线通信: 模拟无线通信是一种使用模拟信号传输数据的通信方式。这种通信方式已经被数字无线通信所取代,因为数字通信具有更高的效率和可靠性。 天线:从空中接收到的无线电波转换成…

数据结构——图的概念,图的存储结构,图的遍历(dfs,bfs)

目录 1.图的定义和术语 2.案例引入 1.六度空间理论 3.图的类型定义 4.图的存储结构 1.邻接矩阵 1.无向图的邻接矩阵表示法 2.有向图的邻接矩阵表示法 3.网(有权图)的邻接矩阵表示法 代码示例: 2.采用邻接矩阵表示法创建无向图…

每天学习一个Linux命令之mount

每天学习一个Linux命令之mount 在Linux系统中&#xff0c;mount命令是一个非常有用的命令&#xff0c;用于将文件系统挂载到特定的挂载点。本篇博客将详细介绍mount命令的用法以及常用选项。 语法 使用mount命令的基本语法如下&#xff1a; mount [选项] <设备或文件系统…

MySQL 表的增删改查

文章目录 一、什么是CRUD&#xff1f;二、新增&#xff08;Create&#xff09;1、单行数据 全列插入2、多行数据 指定列插入3、插入特殊类型 三、查询&#xff08;Retrieve&#xff09;1、全列查询2、指定列查询3、表达式查询4、指定别名5、去重6、排序7、条件查询基本查询&a…

java算法day44 | ● 完全背包 ● 518. 零钱兑换 II ● 377. 组合总和 Ⅳ

完全背包理论基础 完全背包和01背包问题唯一不同的地方就是&#xff0c;每种物品有无限件。 体现在代码中就是对背包的遍历顺序不同。01背包是逆序遍历背包&#xff0c;完全背包是顺序遍历背包。 518. 零钱兑换 II class Solution {public int change(int amount, int[] coin…

微信小程序登录流程

文章目录 1. 用户触发登录操作2. 获取临时登录凭证3. 发送登录凭证到服务器4. 后端使用 code 获取 session_key 和 openid5. 后端保存 session_key 和 openid 返回token6. 前端保存登录态 1. 用户触发登录操作 用户在小程序内部点击登录按钮或进行需要登录权限的操作&#xff…

IMAP的要点:旅行前需要了解的内容

你是否经常因会议而出差&#xff0c;需要在各种设备上灵活地访问你的电子邮件&#xff1f;如果是的话&#xff0c;你可能会想了解你的电子邮件系统是如何通过使用互联网消息访问协议&#xff08;IMAP&#xff09;来工作的&#xff0c;这样当你不在办公桌前时&#xff0c;你可以…

Java基础 - 代码练习

第一题&#xff1a;集合的运用&#xff08;幸存者&#xff09; public class demo1 {public static void main(String[] args) {ArrayList<Integer> array new ArrayList<>(); //一百个囚犯存放在array集合中Random r new Random();for (int i 0; i < 100; …

SpringCloud - 如何本地调试不会注册到线上环境(Nacos)?

问题描述 有时候我们需要本地调试注册到 Nacos 上&#xff0c;但是会影响线上服务的 Feign 请求打到本地导致不通影响了线上业务。 原因分析 一般最传统的解决方案就是修改本地 bootstrap.yml 的 spring.cloud.nacos.discovery.namespace spring:application:name: app-serv…

linux的权限操作

笔试见到有两回了&#xff0c;linux指令来做修改目录或者文件权限&#xff1a; chmod urwx, grwx, orwx filename 改命令说明对filename文件&#xff0c; 赋予user、group、other均有read、write、excute的权限代表增加权限&#xff0c;-代表去掉权限&#xff0c;代表定权限 在…

课时85:流程控制_函数基础_基础知识

2.1.1 基础知识 这一节&#xff0c;我们从 基础知识、简单实践、小结 三个方面来学习。 基础知识 场景需求 在shell脚本的编写过程中&#xff0c;我们经常会遇到一些功能代码场景&#xff1a;多条命令组合在一起&#xff0c;实现一个特定的功能场景逻辑、一些命令在脚本内部…

jvisualvm 使用教程

之前看过 jvisualvm&#xff0c;但是那个时候对 JVM 并不是很熟悉&#xff0c;后面看了下八股文&#xff0c;看了下 JVM 的相关知识之后&#xff0c;发现多了解点 JVM 的东西&#xff0c;对我们 CRUD 其实是有指导意义的&#xff0c;就比如我们通常会 new 一堆的没有用到的对象…

opencv-python库 cv2逐帧读取视频cv2.VideoCapture()

cv2.VideoCapture 是 OpenCV&#xff08;cv2&#xff09;库中的一个类&#xff0c;用于捕获摄像头视频或读取视频文件。以下是 cv2.VideoCapture 的详细用法&#xff1a; 连接摄像头或读取视频文件 创建 VideoCapture 对象&#xff1a;使用 cv2.VideoCapture() 函数创建一个 Vi…

使用 Spring Email 和 Thymeleaf 技术,向新注册用户发送激活邮件(二)

本篇博客对应“2.2 开发注册功能”小结 对应视频: 开发注册功能 开发注册功能-续 注册功能是相对比较复制的功能&#xff0c;对于一个相对复杂的功能&#xff0c;可以把这个功能进行拆解。把这个功能的流程想清楚&#xff0c;就知道怎么拆解了&#xff1a; 也可以按照请求进行…

[每周一更]-第92期:Go项目中的限流算法

这周五在清明假期内&#xff0c;提前更新文章 很多业务会有限流的场景&#xff0c;比如活动秒杀、社区搜索查询、社区留言功能&#xff1b;保护自身系统和下游系统不被巨型流量冲垮等。 在计算机网络中&#xff0c;限流就是控制网络接口发送或接收请求的速率&#xff0c;它可防…

#git 撤消对文件的更改

Git 命令 git checkout -- readme.txt 解析 命令 git checkout -- readme.txt 的作用是撤销对 readme.txt 文件的修改。 具体来说&#xff0c;该命令会将 readme.txt 文件恢复到以下两种状态之一&#xff1a; 1. 未修改状态 如果 readme.txt 文件自修改后还没有被添加到暂存…