当前位置: 首页 > news >正文

在Spring Boot和Vue中实现请求过滤器以验证请求头中的Token

在Spring Boot应用程序中创建一个过滤器类,用于处理请求:

@Component
public class AuthenticationFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 获取请求头中的TokenHttpServletRequest req = (HttpServletRequest) request;String token = req.getHeader("Authorization");// 验证Token是否有效if (isValidToken(token)) {// Token有效,继续执行请求处理链chain.doFilter(request, response);} else {// Token无效,返回401错误HttpServletResponse res = (HttpServletResponse) response;res.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized");}}private boolean isValidToken(String token) {// 在这里进行Token验证,比如验证Token的签名、过期时间等// 如果Token有效,返回true;否则返回false// ...return false;}}

然后,在Spring Boot应用程序中配置该过滤器:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate AuthenticationFilter authenticationFilter;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(authenticationFilter);}}

最后,在Vue应用程序中,可以通过在axios的拦截器中添加请求头来调用该过滤器:

import axios from 'axios';axios.interceptors.request.use(config => {config.headers['Authorization'] = 'Bearer ' + getToken(); // 设置请求头return config;},error => {return Promise.reject(error);}
);

getToken()是一个自定义的函数,用于获取存放在前端的Token。在实际开发中,Token通常会在用户登录成功后由后端返回,并存储在前端的localStorage或sessionStorage中。

一般情况下,后端会返回一个包含Token的JSON对象,例如:

{"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c"
}
const TOKEN_KEY = 'token';function getToken() {return localStorage.getItem(TOKEN_KEY);
}

这样,每次向后端发送请求时,都会在请求头中添加一个Authorization字段,该字段的值是通过getToken()函数获取的。在AuthenticationFilter中,就可以通过获取该请求头中的Token来进行验证。如果Token无效,则返回401错误。

http://www.lryc.cn/news/127953.html

相关文章:

  • ThreeJS——在3D地球上标记中国地图板块
  • 第2章 性能测量
  • 未来,运营的重要性大于产品?
  • paddle ocr框架识别数字问题和解决方案
  • 构建高性能的MongoDB数据迁移工具:Java的开发实践
  • 2023年国赛数学建模思路 - 案例:最短时间生产计划安排
  • 1572. 矩阵对角线元素的和
  • 在vue中使用swiper轮播图(搭配watch和$nextTick())
  • Java书签 #使用MyBatis接入多数据源
  • 神经网络基础-神经网络补充概念-23-神经网络的梯度下降法
  • 鸿蒙3.1 设备管理DeviceManager
  • Git 目录详解
  • 基于springboot+vue的武汉旅游网(前后端分离)
  • 步入React正殿 - React组件设计模式
  • Java 单例模式简单介绍
  • 根据源码,模拟实现 RabbitMQ - 从需求分析到实现核心类(1)
  • 企业服务器数据库遭到malox勒索病毒攻击后如何解决,勒索病毒解密
  • udp与can通信的选择与比较
  • HoudiniVex笔记_P24_ForceBasics力基础
  • 半导体退火那些事(1)
  • MapReduce介绍
  • Redis支持的主要数据结构操作命令有哪些?
  • 环境与能源创新专题:地级市绿色创新、碳排放与环境规制数据
  • 设计模式之门面模式(Facade)的C++实现
  • 【数理知识】向量与基的内积,Matlab 代码验证
  • 黑客入侵:福特汽车Sync3车机存在漏洞,黑客入侵可抹除系统数据
  • 面试热题(单词搜索)
  • 自定义表格组件:实现表格中有固定列的功能逻辑
  • uni-app弹窗列表滚动, 弹框下面的内容也跟随滚动解决方案
  • Django操作cookie、Django操作session、Django中的Session配置、CBV添加装饰器、中间件、csrf跨站请求