Filter过滤器+JWT令牌实现登陆验证
一、背景
我们需要在客户端访问服务器的时候给定用户一定的操作权限,比如没有登陆时就不能进行其他操作。如果他需要进行其他操作,而在这之前他没有登陆过,服务端则需要将该请求拦截下来,这就需要用到过滤器,过滤器可以完成一些登录校验、统一编码处理、敏感字符处理等操作。
二、分析

三、实现
3.1 准备工作:JWT令牌实现登陆校验-CSDN博客
3.2 准备依赖:在pom.xml中添加以下依赖:这个包可以快速将object对象转成json格式。
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version></dependency>
3.3 目录结构:新建filter包以及包下LoginFilter类
3.4 LoginFilter.java:注意必须添加@WebFilter(urlPatterns = "/*"),这是Java中过滤器的标记
package com.bytedance.filter;
import com.alibaba.fastjson.JSONObject;
import com.bytedance.pojo.Result;
import com.bytedance.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@Slf4j
@WebFilter(urlPatterns = "/*") // 注意这里必须要添加
public class LoginFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;HttpServletResponse resp = (HttpServletResponse) response;// 1.获取请求的urlString url = req.getRequestURL().toString();log.info("请求的url:{}",url);// 2.判断url中是否包含login,如果包含则放行if (url.contains("login")){log.info("登陆操作,放行");chain.doFilter(request, response);return;}// 3.获取请求头中的令牌String jwt = req.getHeader("token");// 4.判断令牌是否存在if (!StringUtils.hasLength(jwt)){log.info("请求头为空,返回未登录信息~");Result error = Result.error("NOT_LOGIN");// 手动转换 对象->json 引入阿里巴巴fastjson依赖String noLogin = JSONObject.toJSONString(error);resp.getWriter().write(noLogin);return;}// 5.令牌存在,校验try {JwtUtils.parseJWT(jwt);}catch (Exception e){ // jwt解析失败e.printStackTrace();log.info("解析令牌失败,返回未登录错误信息");Result error = Result.error("NOT_LOGIN");// 手动转换 对象->json 引入阿里巴巴fastjson依赖String noLogin = JSONObject.toJSONString(error);resp.getWriter().write(noLogin);return;}// 6.放行log.info("放行");chain.doFilter(request,response);}
}
3.5 启动类:除此之外,在启动类中必须添加注解:@ServletComponentScan

相关文章:
Filter过滤器+JWT令牌实现登陆验证
一、背景 我们需要在客户端访问服务器的时候给定用户一定的操作权限,比如没有登陆时就不能进行其他操作。如果他需要进行其他操作,而在这之前他没有登陆过,服务端则需要将该请求拦截下来,这就需要用到过滤器,过滤器可以…...
SQL学习十八~十九
...
2024 AI 辅助研发的新纪年
随着人工智能技术的持续发展与突破,2024年AI辅助研发正成为科技界和工业界瞩目的焦点。从医药研发到汽车设计,从软件开发到材料科学,AI正逐渐渗透到研发的各个环节,变革着传统的研发模式。在这一背景下,AI辅助研发不仅…...
【牛客】HJ87 密码强度等级 CM62 井字棋
题目一:密码强度等级 题目链接:密码强度等级_牛客题霸_牛客网 (nowcoder.com) 本题主要考察C语言中逻辑分支语句,基本语句以及对各种特殊字符 ,ASCII值以及条件表达中的逻辑运算符关系运算符各自功能的理解,以及基本使用&#x…...
【论文速读】 | DeGPT:通过大语言模型优化反编译器输出
本次分享论文为:DeGPT: Optimizing Decompiler Output with LLM 基本信息 原文作者:Peiwei Hu, Ruigang Liang, Kai Chen 作者单位:中国科学院信息工程研究所;中国科学院大学网络空间安全学院 关键词:反向工程&…...
【DP】蓝桥杯第十三届-费用报销
#include<iostream> #include<algorithm> #include<cstring> #include<set> #include<queue> using namespace std; const int N1010; int dp[N][5010];//dp[i][j]:选到第i个物品是否能取到价值j; int month[13]{0,31,28,31,30,31,30…...
15. C++泛型与符号重载
【泛型编程】 若多组类型不同的数据需要使用相同的代码处理,在C语言中需要编写多组代码分别处理,这样做显然太过繁琐,C增加了虚拟类型,使用虚拟类型可以实现一组代码处理多种类型的数据。 虚拟类型是暂时不确定的数据类型&#…...
老司机都懂的!【打赏】完美运营的最新视频打赏系统
完美运营的最新视频打赏系统优于市面上95%的打赏系统,与其他打赏系统相比,功能更加强大,完美运营且无bug。支付会调、短链接生成、代理后台、价格设置和试看功能等均没有问题。 以上为原简介,经测试验证。成功搭建并可以正常进入…...
JavaWeb笔记 --- 二、Maven
二、Maven Maven概述 所有的IDE创建的Maven项目都可以使用 Maven简介 Maven模型 Maven常用命令 Maven生命周期 Maven坐标 依赖管理 dpendencies:依赖 依赖范围...
【C++】C++11---右值引用和移动语义
目录 1、什么是左值引用和右值引用2、左值引用与右值引用比较3、右值引用使用场景和意义4、右值引用引用左值的分析5、完美转发 1、什么是左值引用和右值引用 传统的C语法中就有引用的语法,而C11中新增了的右值引用语法特性,所以从现在开始我们之前学习…...
消息队列-kafka-消息发送流程(源码跟踪) 与消息可靠性
官方网址 源码:https://kafka.apache.org/downloads 快速开始:https://kafka.apache.org/documentation/#gettingStarted springcloud整合 发送消息流程 主线程:主线程只负责组织消息,如果是同步发送会阻塞,如果是异…...
机器学习笔记 计算机视觉中的测距任务常见技术路线
一、计算机视觉中的测距任务 测距是计算机视觉中的一项关键任务,涉及测量物体和相机之间的距离。这些信息可用于多种应用,包括机器人、自动驾驶汽车和增强现实。测距技术有很多种,包括主动式和被动式,每种技术都有自己的优点和局限性。主动测距技术,例如飞行时间、结构光和…...
云计算 3月8号 (wordpress的搭建)
项目wordpress 实验目的: 熟悉yum和编译安装操作 锻炼关联性思维,便于以后做项目 nginx 编译安装 1、安装源码包 [rootlinux-server ~]# yum -y install gcc make zlib-devel pcre pcre-devel openssl-devel [rootlinux-server ~]# wget http://nginx.…...
【CSS】(浮动定位)易忘知识点汇总
浮动特性 加了浮动之后的元素,会具有很多特性,需要我们掌握的. 1、浮动元素会脱离标准流(脱标:浮动的盒子不再保留原先的位置) 2、浮动的元素会一行内显示并且元素顶部对齐 注意: 浮动的元素是互相贴靠在一起的(不会有缝隙)&…...
Vitual Box虚拟机打开后,键盘鼠标失效
Vitual Box虚拟机打开后,键盘鼠标失效 作者在使用Vitual Box虚拟机软件时,偶然发现打开VitualBox后,鼠标和键盘均无法使用。 你以为是“主机热键”引起的?NO! 废话少说 直接上干货: 在VitualBox设置下有…...
宠物空气净化器值得入手吗?选购宠物空气净化器关注哪些方面?
一开始养猫时,每天看着可爱的猫咪在家里快乐奔跑,让人心情愉悦。然而,作为铲屎官都知道,猫咪会掉毛,特别是在换毛期间,地板、沙发上都会有一大堆猫毛,甚至衣服也可能沾满猫毛。养猫家庭中&#…...
前端发起请求,后端模型需处理很久,怎样设置前端直接完成请求响应,后端计算完在返回结果给前端?
在这种情况下,可以采用异步处理的方式来解决。具体步骤如下: 前端发起请求:前端向后端发送请求,但是不等待后端处理完成而是立即得到响应。 后端异步处理:后端接收到请求后,不立即进行处理,而是…...
DDD领域驱动设计
一、什么是领域驱动设计DDD 领域驱动设计(Domain-Driven Design,DDD)是一种软件开发方法论,它提出了一组关于如何设计和构建软件系统的原则和方法。 二、DDD的诞生是为了解决哪些问题 对复杂业务领域的理解不足:传统…...
网络编程第1天
OSI的七层网络模型有哪些,每一层有什么作用? (1)应用层 负责处理不同应用程序之间的通信,需要满足提供的协议,确保数据发送方和接收方的正确 应用层提供的协议: HTTP:超文本传输…...
Springboot--整合Logback 日志框架(Maven)
文章目录 前言一、Logback 日志框架介绍:二、整合:2.1 引入jar2.2 logback.xml 文件配置:2.3 日志输出:2.3.1 方式一:2.3.2 方式二: 2.3 日志输出结果展示: 三、扩展:3.1 日志输出格…...
从电机控制到电源设计:手把手教你复用Simulink扫频技巧搞定DCDC环路分析
从电机控制到电源设计:复用Simulink扫频技巧实现DCDC环路分析 当一位熟悉永磁同步电机控制的工程师初次接触移相全桥DCDC电源设计时,往往会发现两者在环路分析上存在惊人的相似性。这种相似性不仅体现在数学模型的构建思路上,更在于实际工程中…...
网盘下载革命:八大平台直链解析的终极解决方案
网盘下载革命:八大平台直链解析的终极解决方案 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / …...
春联生成模型-中文-base实战体验:输入“安康”、“勤勉”等词实测
春联生成模型-中文-base实战体验:输入"安康"、"勤勉"等词实测 1. 模型简介与使用场景 春联作为中国传统文化的瑰宝,每逢春节都承载着人们对美好生活的向往。达摩院AliceMind团队推出的春联生成模型-中文-base,基于强大…...
别再暴力解压了!用python-docx库精准提取Word文档内嵌图片(附源码)
用python-docx精准提取Word文档图片的工程实践 在文档自动化处理领域,Word文档中的图片提取是个高频需求。许多开发者第一反应是用zipfile解压.docx文件,然后在解压后的文件夹中寻找图片资源。这种方法看似直接,实则存在严重缺陷——你无法确…...
别再只ping 127.0.0.1了!聊聊这个‘回环地址’在开发、测试和网络屏蔽中的5个实战用法
127.0.0.1的五大实战应用:从开发调试到网络优化 每次在终端输入ping 127.0.0.1看到"Reply from 127.0.0.1"的响应时,你是否想过这个特殊的IP地址还能做什么?对于开发者、测试工程师和网络爱好者来说,127.0.0.1远不止是一…...
网盘直链解析工具终极指南:8大平台真实下载地址一键获取
网盘直链解析工具终极指南:8大平台真实下载地址一键获取 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...
别再踩坑了!微信小程序this.setData修改对象属性的两种正确姿势(附数组场景)
微信小程序this.setData操作对象属性的深度避坑指南 刚接触微信小程序开发时,我曾在this.setData修改对象属性上栽过不少跟头。记得有一次深夜调试,明明逻辑看起来没问题,页面却始终不更新,最后发现是对象属性修改方式不当导致的。…...
抖音批量下载助手完整教程:三步轻松获取海量视频素材
抖音批量下载助手完整教程:三步轻松获取海量视频素材 【免费下载链接】douyinhelper 抖音批量下载助手 项目地址: https://gitcode.com/gh_mirrors/do/douyinhelper 还在为手动保存抖音视频而烦恼?抖音批量下载助手让您轻松批量下载多个创作者的全…...
将数据库中的 UTC 时间准确转换为英国夏令时(BST)的 PHP 实现方法
本文介绍如何使用 PHP 的 DateTime 类,将存储在数据库中的 UTC 时间字符串(如 2022-04-06 08:30:00)自动、可靠地转换为英国本地时间——在夏令时期间正确显示为 BST(UTC1),冬令时期间自动回退为 GMT&#…...
碧蓝航线自动化助手Alas:解放双手的智能游戏管家
碧蓝航线自动化助手Alas:解放双手的智能游戏管家 【免费下载链接】AzurLaneAutoScript Azur Lane bot (CN/EN/JP/TW) 碧蓝航线脚本 | 无缝委托科研,全自动大世界 项目地址: https://gitcode.com/gh_mirrors/az/AzurLaneAutoScript 想象一下这样的…...
