Interceptor拦截器+JWT令牌实现登陆验证

一、背景

        与过滤器的作用类似,不过拦截器是spring中的组件,只能拦截进入spring的请求;过滤器则可以拦截所有从前端页面发送来的请求。

*拦截器和过滤器选一就可以实现登陆验证,过滤器的实现在以下这篇博客中,有需要可以自取:

Filter过滤器+JWT令牌实现登陆验证-CSDN博客

二、分析

  • 定义拦截器,实现HanderInterceptor接口,并重写其所有方法。
  • 注册拦截器

三、实现

1、目录结构

2、 LoginCheckInterceptor.java:定义拦截器,实现HanderInterceptor接口,并重写其所有方法。

package com.bytedance.interceptor; //换成自己包名import com.alibaba.fastjson.JSONObject;
import com.bytedance.pojo.Result;
import com.bytedance.utils.JwtUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Slf4j@Component
public class LoginCheckInterceptor implements HandlerInterceptor {@Override // 目标资源方法运行前运行,返回true:放行;返回false,不放行public boolean preHandle(HttpServletRequest req, HttpServletResponse res, Object handler) throws Exception {// 1.获取请求的urlString url = req.getRequestURL().toString();log.info("请求的url:{}",url);// 2.判断url中是否包含login,如果包含则放行if (url.contains("login")){log.info("登陆操作,放行");return true;}// 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);res.getWriter().write(noLogin);return false;}// 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);res.getWriter().write(noLogin);return false;}// 6.放行log.info("放行");return true;}@Override // 目标资源方法(controller方法)运行后运行public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println("postHandle...");}@Override // 视图渲染完毕后运行,最后运行public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println("afterCompletion...");}
}

3、Webconfig.java: 注册拦截器

package com.bytedance.config;//换成自己包名import com.bytedance.interceptor.LoginCheckInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class Webconfig implements WebMvcConfigurer {@Autowiredprivate LoginCheckInterceptor loginCheckInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**").excludePathPatterns("/login");}
}

四、测试 

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

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

相关文章

在Exchange中启用/禁用搜索索引

默认情况下,所有的新邮箱数据都是启用Exchange搜索,仅当多个邮箱迁移到该Exchange Server时,才禁用搜索索引。 获取数据库的Exchange搜索索引 使用Get-MailboxDatabase 来获取数据库的搜索索引 Get-MailboxDatabase | Select-Object Name,…

蚂蚁SEO泛程序什么用?

蚂蚁SEO泛目录程序是一种常见的网站优化方法,其核心原理是利用高权重的网站继承目录,进而达到快速收录与排名的效果。具体表现形式分为网站、目录以及文章单页,通过目录文件的方式,利用关键词优化布局提升网站排名和流量。 这种技…

【自动驾驶系列丛书学习】2.《自动驾驶汽车环境感知》学习笔记

《自动驾驶技术概论》学习笔记 致谢:作者:甄先通、黄坚、王亮、夏添 -------------------------------------------------------------------------------------------------------- 笔记目录 -----------------------------------------------------…

QEMU调试——通过获取设备树(dtb文件)查询开发板的外设地址信息

1、适用场景 使用qemu时,想快速知道开发板的地址空间映射情况,特别是某些外设控制器的寄存器基地址 2、查询QEMU支持的开发板 qemu-system-riscv32.exe -M ? 3、获取开发板对应的dtb文件 1、qemu-system-riscv32.exe -M nuclei_evalsoc 2、dumpdtb nucl…

触发HTTP preflight预检及跨域的处理方法

最近在做需求的过程中,遇到了很多跨域和HTTP预检的问题。下面对我所遇到过的HTTP preflight和跨域的相关问题进行总结: 哪些情况会触发HTTP preflight preflight属于cors规范的一部分,在有跨域的时候,在一定情况下会触发preflig…

设计模式-原型模式实践案例

原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有的实例来创建新的实例,而不是通过初始化过程。在 Java 中,这通常是通过实现 Cloneable 接口并定义 clone() 方法来实现的。原型模式适用于创建复制对象…

linux 文件权限

仅仅记录一下,怎么添加文件权限 r表是读 (Read) 、w表示写 (Write) 、x表示执行 (eXecute) 读、写、运行三项权限可以用数字表示,就是r4,w2,x1,777就是rwxrwxrwx 你可能不懂什么意思 举个例吧! 如上图有一个文件,它…

arm系统构建的三部分

1.boot/loader 启动 uboot引导程序 uboot启动之前要明确内核文件位置(服务器-和网线连着的机器或SD卡),uboot设置参数,寻找文件位置(放服务器上,需要IP地址路径,通过网线下载到开发板上。&…

跨界探险:出海与网络安全的奇幻之旅

在这个全球化的时代,"出海"已经成为了众多企业家和技术爱好者的热门话题。不论是跨界电商、游戏产业,还是技术开发,所有的这些都离不开一个看似晦涩却又极为重要的技术——SOCKS5代理以及代理IP的应用。让我们一起踏上这场结合网络…

利用auto-py-to-exe库的简单图形界面实现.py到.exe的转换

文章目录 1. auto-py-to-exe 简介2. 安装与使用3. 配置项介绍4. 打包完成 1. auto-py-to-exe 简介 运行 .py 文件需要配套相应的 Python 解释器和相关的依赖项,而很多时候我们会面临光有待演示的 .py 程序,而没有支持演示的环境的尴尬。一种解决办法就是…

仪酷LabVIEW OD实战(4)——Object Detection+OpenVINO工具包快速实现yolo目标检测

‍‍🏡博客主页: virobotics(仪酷智能):LabVIEW深度学习、人工智能博主 🎄所属专栏:『仪酷LabVIEW目标检测工具包实战』 📑上期文章:『仪酷LabVIEW OD实战(3)——Object Detectiononnx工具包快速…

蓝桥杯2023年第十四届省赛真题-岛屿个数|DFS

题目链接: 蓝桥杯2023年第十四届省赛真题-岛屿个数 - C语言网 (dotcpp.com) 参考视频: 【[蓝桥杯]真题讲解:岛屿个数(BFS遍历图)】 https://www.bilibili.com/video/BV1uc411v7Tw/?share_sourcecopy_web&vd_sou…

Java+SpringBoot+Vue+MySQL:农业管理新篇章

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

Z Potentials | 星爵,他的征途不止向量数据库

纵观过去几十年的科技发展史,每一代新的技术架构的出现往往都伴随着新的数据范式的出现,也催生了多家百亿到千亿美金数据平台的诞生。如果说 2023 年科技领域的关键词是 LLM,那么数据库领域的关键词一定非向量数据库莫属。向量数据库是一种专…

【项目实践04】【RocketMQ消息收发拦截器】

文章目录 一、前言二、项目背景三、实现方案1. 关键接口2. 消息发送方3. 消息消费方4. 配置引入类5. 使用示例 四、思路扩展1. 消费流程简介 一、前言 本系列用来记录一些在实际项目中的小东西,并记录在过程中想到一些小东西,因为是随笔记录&#xff0c…

Vision Transformer结构解析

ViT简介 Vision Transformer。transformer于2017年的Attention is all your need提出,该模型最大的创新点就是将transformer应用于cv任务。 论文题目:An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale 论文链接&#xff1…

501.二叉搜索树的众数

501.二叉搜索树中的众数 思路 第一眼,中序遍历哈希表找最大出现次数解题,暴力解法。需要中序遍历一遍哈希表取最大值一遍哈希表根据最大值找对应键一遍。复杂度3n。 后续,可根据二叉搜索树性质来解,在中序遍历时对前后两个相邻…

【工具相关】showdoc文档管理平台部署实践

文章目录 一、前言1、需求来由2、showdoc说明 二、部署安装1、docker安装2、showdoc安装3、设置开机自启 三、数据备份1、docker镜像备份2、showdoc数据备份 四、数据恢复1、docker镜像恢复2、showdoc数据恢复 五、常用操作1、镜像相关2、容器相关 一、前言 1、需求来由 内部…

Apache POI Excel的读写

1、 POI介绍 Apache POI是用Java编写的免费开源的跨平台的Java API,Apache POI提供API给Java程 序对Microsoft Office格式档案读和写的功能,其中使用最多的就是使用POI操作Excel文 件。 jxl:专门操作Excel maven坐标: POI结构:…

【Vue3-vite】动态导入路由

route文件结构 router moduleindex.ts 路由定义 // 需要导入的路由如下: const routes [{path: /manage,name: manage,component: () > import(/views/home/index.vue),children: manageRoutes,}]index.ts实现从module中自动导入 // 动态导入 const routeFil…