SpringBoot:SaToken的options预检请求鉴权失败

news/2025/1/15 16:57:17/

问题描述

        使用如下sa-token配置,前端通过IP+端口号的方式访问后端服务,会存在options预检请求鉴权失败的问题。

问题分析

http-options请求

HTTP OPTIONS 方法请求给定的 URL 或服务器的允许通信选项。客户端可以用这个方法指定一个 URL,或者用星号(*)来指代整个服务器

        通过options请求,我们可以检测服务器所支持的请求方法。

预检请求

        CORS 预检请求用于检查服务器是否支持 CORS 协议,并且是否允许使用特定的方法和标头。

        当有必要的时候,浏览器会自动发出预检请求;所以在正常情况下,前端开发者不需要自己去发这样的请求。预检请求会在请求被标记为“需要预检”时进行,而对于简单请求则不会进行。

CORS中的预检请求

        与简单请求不同,“需预检的请求”要求必须首先使用 OPTIONS 方法发起一个预检请求到服务器,以获知服务器是否允许该实际请求。"预检请求“的使用,可以避免跨域请求对服务器的用户数据产生未预期的影响。

        当客户端尝试对一个与当前源不同的服务器发起跨域 HTTP 请求时,如果该请求包含复杂的 HTTP 方法(比如 PUT、DELETE)或使用了一些特殊的请求头(如 Authorization),浏览器会自动先发出 OPTIONS 请求,检查服务器是否允许该请求。这个过程称为预检请求 (Preflight Request)。通过预检,浏览器可以在发送实际的 HTTP 请求之前,确保服务器接受该请求,避免不必要的数据传输。

解决方案

        当出现预检请求的时候,会发现sa-token鉴权无法通过,即使登录成功了,也会由于options请求鉴权失败,而导致接口无法访问。以下为两种解决方案,

方式1:修改客户端请求方式

        调整请求方法、去除自定义header、修改Content-Type,基本可以避免该请求发出OPTIONS预检请求

方式2:服务端控制,放行options请求

        代码如下,


http://www.ppmy.cn/news/1563367.html

相关文章

MFC界面库ToolkitPro v15.3.1的编译和使用教程(支持VS2015和VS2017)

一、ToolkitPro v15.3.1库的下载 界面库全称为Codejock Xtreme Toolkit Pro,目前可以免费使用的版本为v15.3.1,可以在CSDN上搜索下载,有很多,比如 https://download.csdn.net/download/nizheng96/11151867 二、ToolkitPro v15.3…

IDEA的Java注释在Toggle Rendered View下的字号调整方式

记录IntelliJ IDEA的Java注释在Toggle Rendered View下的字号调整方式 如图,在Toggle Rendered View模式下的注释字号很大,与代码不协调,在此区域点击鼠标右键,选中 Adjust 出现一个滑动条,通过拖动游标调整字号大小…

单片机(MCU)-简单认识

简介: 内部集成了CPU,RAM,ROM,定时器,中断系统,通讯接口等一系列电脑的常用硬件功能。 单片机的任务是信息采集(依靠传感器),处理(依靠CPU)&…

什么是IDE,新手如何选择IDE?

IDE 是 Integrated Development Environment(集成开发环境)的缩写,它是一种软件应用程序,为程序员提供了一站式的开发环境,整合了多种工具和服务,以便高效地创建、修改、编译、调试和运行软件程序。IDE 集成…

搭建Node.js后端

从头开始搭建一个Node.js后端,并实现查询历史数据的功能,下面是详细的步骤说明,包括环境配置、项目初始化、代码编写、以及服务器启动。 1. 环境配置 1.1 安装 Node.js 和 npm 首先,你需要在你的电脑上安装 Node.js 和 npm&…

springmvc的获取请求数据

在使用 SpringMVC 开发 web 应用时,我们经常需要从用户的请求中获取数据。不管是表单提交、查询参数,还是路径上的数据,SpringMVC 都为我们提供了简单而强大的方式来获取这些数据。 1. 使用 RequestParam 获取查询参数 基本使用&#xff1a…

Agile Scrum 敏捷开发方法

Agile Scrum 是一种敏捷开发方法,广泛用于软件开发以及其他项目管理领域。它强调迭代式的工作流程、团队协作、灵活应对变化和持续改进,旨在通过快速交付和反馈来最大化项目价值。Scrum 是 Agile(敏捷)方法中的一种具体实践框架&a…

旅行商问题

数据结构可以分为线性结构、半线性结构、非线性结构。最基本的线性结构是序列。序列分为向量和列表。向量的逻辑次序称为秩&#xff0c;列表逻辑上相邻的数据项采用间接定址的方式通过封装后的位置相互引用。 #include<iostream> #include<algorithm> #include<…