自定义拦截器jwt登录校验接口模拟账号登录

news/2024/5/20 1:34:14

五一闲在宿舍,本来想写一个自己的简易博客网站,发现vue基础太差,做不出来页面效果于是便放弃,但也没有完全放弃。于是我分析了一下简易博客的后端实现流程,除了最基本的crud以外,在自己目前的对接口的分析中感觉比较复杂的便是登录校验这一块,于是便用apifox 进行接口测试,模拟实现一个登录校验接口

接口分析

我们在发送一个登录请求到后端之后,首先会经过拦截器,拦截器拦截到这次登录请求,于是就会创建一个token返回给前端,在接下来的每次请求后面都会携带这个token进行请求。

假设 我们token返回给前端之后,前端进行校验成功,然后切换到登录之后的页面。切换到登录之后的页面之后,你的每一次请求都会携带后端创建的token进行校验之后,再进行数据的查询显示等操作

准备工作

1.依赖的引入

我们引入 jwt 依赖  lombok 依赖 以及其他常用的依赖

这里在我的pom文件中 因为只有一个demo  并没有多个demo,所以并没有用maven的继承聚合分模块管理等,而是直接进行依赖的引入

2.配置 jwt 的yml文件 以及对应的实体类

3.为了使用方便  我们提前设置好 jwt令牌创建与解析的工具类

我们先分析一下创建jwt的方法的传入参数    第一个map集合,我们一般传入的是   登录人员的id,因为到后面由登录id 创建的jwt令牌,到最后解析的时候解析出来的也是这个我们传入的登陆人员的id ,第二个参数 是自己设置的签名密匙,第三个是设置的jwt过期时间单位是毫秒

解析jwt参数 传入的是创建的token和签名密匙

4.配置拦截器

首先 我们配置一个configuration类实现  WebMvcConfigurer 接口 ,重写addInterceptors方法

,然后再写一个拦截器类 实现

 HandlerInterceptor 接口  重写  preHandle  方法。

在这里我们产生一个思考   filter 接口这么好用 只需要 实现一个filter接口 然后 加上@webfilter注解

指定过滤的路径就行了,为什么要用拦截器  

我觉得主要是   拦截器可以进行更好的封装 ,过滤器能做的拦截器都能做 而且过滤器主要负责处理与请求相关的预处理和后处理工作,拦截器主要进行业务操作

过滤器需要在servlet容器中实现,拦截器可以适用于javaEE,javaSE等各种环境

拦截器可以获取IOC容器中的各个bean,而过滤器就不行,这点很重要,在拦截器里注入一个service,可以调用业务逻辑 

综上所述一般就用拦截器,但是两者的选择还是主要看业务场景 

登录接口书写

该接口是一个简易的实现,他的返回值调用值其实并不规范    

在此  我们并没有使用 autowired注解,而是使用lombok的@requireargconstructor注解,基于构造方法注入 bean

拦截器的配置

在这里我为了省力还是用了 autowired 注解,虽然没啥事,但是这并不是springboot现在建议使用的注解 。

当时写完之后 我在想,如果由坏蛋拿到了我的请求 直接用postman或者apifox进行接口请求攻击我怎么办,但是仔细思考了一下发现他们这样并行不通,首先 第一次  他的请求 是/userlogin请求,发现是第一次登录,系统就会校验他的用户名密码,在sql的编写中  用#占位符防止SQL注入。

我又想 如果他拿到token,拿到我的请求网址用postman测试我的接口,但是他涉及的操作也就是登录之后我给予的权限操作,这样貌似并没有什么问题,关于这点  ,我对网络攻击也不太懂,就不去深究了。

这样 我们就写好了一个自定义接口  

接下来进行测试

首先在paifox中进行一系列的设置

接下来启动服务  ,发送请求

 测试通过  

在写的时候想到 由于现在经验并不足,可能这里面会有一些小bug ,如果有,还希望大佬指正


http://www.mrgr.cn/p/56236601

相关文章

Qt---day2-信号与槽

1、思维导图 2、 拖拽式 源文件 #include "mywidget.h" #include "ui_mywidget.h" MyWidget::MyWidget(QWidget *parent) : QWidget(parent) , ui(new Ui::MyWidget) { ui->setupUi(this); //按钮2 this->btn2new QPushButton("按钮2",th…

Java的Fork-Join简单介绍

Java的Fork-Join框架是Java 7引入的一个用于并行处理的轻量级框架,它基于分治策略(Divide and Conquer),特别适合于那些可以被分解为多个子任务的任务。Fork-Join框架的核心思想是将一个大任务(Task)拆分成…

Sermant在异地多活场景下的实践

本文将对Sermant在异地多活场景下的实践进行剖析。本文分享自华为云社区《Sermant在异地多活场景下的实践》,作者:华为云开源。 Sermant社区在1.3.0和1.4.0版本相继推出了消息队列禁止消费插件和数据库禁写插件,分别用于解决异地多活场景下的故障切流和保护数据一致性问题。…

算法~PBKDF2-SHA让密码更安全

摘要:在当今的数字世界中,密码安全是至关重要的。为了保护用户密码免受未经授权的访问和破解,Password-Based Key Derivation Function 2 (PBKDF2)算法成为了一种重要的工具。 在 PBKDF2 算法中,SHA 表示 Secure Hash Algorithm,它是一系列密码哈希函数的标准,其中 SHA-1…

C#语言核心

一、面向对象基本概念 万物皆对象,用程序来抽象(形容)对象,用面向对象的思想来编程 用中文去形容一类对象,把一类对象的共同点提取出来,然后用程序语言把它翻译过来,带着对象的概念在程序中使…

P9218 Apollo题解

题目分析 仔细阅读题目,可知题目要求的是对于每个 \(a_i\) 的 \(\sum\limits_{j=1}^ng(a_i,a_j)\) 。再结合 \(g(a,b)\) 的定义,可知,对于 \(a_i\) 来说,我们需要计算 \(a_i\) 与 \(a_1\sim a_n\) 构成的 \(n\) 组数对的 \(g(a_i,a_j)\) 的总和。对于 \(g(a,b)\) 的值,则是…

tomcat的cookie报错

1.File–>project structure -> Modules(+)–>java—>选择servlet-api.jar 需要添加servlet.api.jar包依赖

SpringBoot中这样用ObjectMapper

每次new一个单例化个性化配置小结 你要说他有问题吧,确实能正常执行;可你要说没问题吧,在追求性能的同学眼里,这属实算是十恶不赦的代码了。 首先,让我们用JMH对这段代码做一个基准测试,让大家对其性能有个…

[转帖]如何通过Native Memory Tracking追踪JVM的内部内存使用?

https://zhuanlan.zhihu.com/p/368599144# 导读:Java8给 HotSpot VM引入了Native Memory Tracking (便于阅读我统一简称为NMT)特性,可以用于追踪JVM的内部内存使用,并可以通过jcmd命令来访问。不过要注意的是NMT是通过在JVM代码中添加跟踪点的方式实现内存跟踪的,因此NMT不…

github提交不了的问题

开了VPN提交的时候提示这个报错 是需要这两个端口号一致,就能提交了

无人零售,重塑购物新纪元

在这个快节奏的时代,科技的每一次跃进都在悄无声息地改变着我们的生活方式。而今,无人零售正以雷霆之势,颠覆传统购物模式,为我们带来前所未有的便捷与智能体验。想知道无人零售如何彻底改变我们的购物方式吗?跟随我&a…

Vue3管理系统-路由设置+表单校验

一、配置路由规则 1.在views 下创建文件夹分类,搭好架子 2.配置路由规则 在router下Index.js import { createRouter, createWebHistory } from vue-routerconst router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [//一级路由//这里可以…

栈数据结构

1,概念 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈(push)&#x…

set-cookie字段,cookie文件介绍+原理,如何查看cookie文件,在基于http协议服务器的代码实现,cookie存在问题+解决(会话机制)

目录 Set-Cookie 引入 介绍 原理 描述 图解 保存"cookie文件"的方法 内存级 文件级 查看cookie文件 示例 实现 介绍 代码 核心代码 全部代码 示例 cookie存在的问题 介绍 存在的必要性 如何解决 问题梳理 引入 会话机制 -- 解决信息泄漏…

微软正在自主构建一个名为 MAI-1 的大型语言模型(不依赖 OpenAI)

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

栈的实现以及c语言解决括号匹配问题

一、栈的实现 1、头文件 typedef int STDataType; typedef struct Stack {STDataType* _a;int _top; // 栈顶int _capacity; // 容量 }Stack; // 初始化栈 void StackInit(Stack* ps); // 入栈 void StackPush(Stack* ps, STDataType data); // 出栈 void StackPop(S…

于光电容积波PPG和心电图ECG的连续血压估计深度学习模型

具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 血压监测是监测人们健康状况的途径之一。早期发现血压异常可以帮助患者得到早期治疗并降低与心血管疾病相关的死亡率。因此,有一种机制来实时监测患者的血压变化是非常有价值的。在本文中,我们提出了…

向各位请教一个问题

这是菜鸟上的一道题目,单单拿出来问问大家,看看能不能解惑 ,谢谢各位! 题目25:求12!3!...20!的和 解题思路:这个题不知道为什么我用DEV C 5.11显示出来为0.000000,可能版本有问题?&a…

Unet简单结构概述

总体结构代码 class UNet(nn.Module):def __init__(self, n_channels, n_classes, bilinearFalse):super(UNet, self).__init__()self.n_channels n_channelsself.n_classes n_classesself.bilinear bilinearself.inc (DoubleConv(n_channels, 64))self.down1 (Down(64, …