解决SpringBoot中出现的跨域请求问题

When allowCredentials is true, allowedOrigins cannot contain the
special value "*"since that cannot be set on the
“Access-Control-Allow-Origin” response header. To allow credentials to
a set of origins, list them explicitly or consider using
“allowedOriginPatterns” instead.

@Configuration
public class InterceptorConfig implements WebMvcConfigurer {@Resourceprivate LoginInterceptor loginInterceptor;@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOriginPatterns("*").allowCredentials(true).allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS").maxAge(3600);}@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.// 添加拦截器addInterceptor(loginInterceptor).// 添加拦截路径addPathPatterns("/**").// 白名单excludePathPatterns("/login");}
}123456789101112131415161718192021222324252627

登录拦截器

@Slf4j
@Component
public class LoginInterceptor implements HandlerInterceptor {@Resourceprivate RedisTemplate<Object, Object> redisTemplate;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {log.info("拦截器===>" + "LoginInterceptor.preHandle");// PreFlight请求,忽略本拦截器// 浏览器必须首先使用 OPTIONS 方法发起一个预检请求(preflight request)// 从而获知服务端是否允许该跨源请求// 服务器确认允许之后,才发起实际的 HTTP 请求// 如果是预检请求 没有做登录验证直接放行// 没有放心 在下面的操作中不能从请求头中取得tokenif (CorsUtils.isPreFlightRequest(request)) {return true;}//...登录验证的操作}
}123456789101112131415161718192021222324

在跨域请求中, 会有一次预检请求.

跨源资源共享 (CORS) (或通俗地译为跨域资源共享)是一种基于HTTP 头的机制,该机制通过允许服务器标示除了它自己以外的其它origin(域,协议和端口),这样浏览器可以访问加载这些资源。跨源资源共享还通过一种机制来检查服务器是否会允许要发送的真实请求,该机制通过浏览器发起一个到服务器托管的跨源资源的"预检"请求。在预检中,浏览器发送的头中标示有HTTP方法和真实请求中会用到的头。

如, 再一次登录的过程中,
首先会发送一次 OPTIONS 请求, 请求头如下:

OPTIONS /manager/login HTTP/1.1
Host: 192.168.161.31:8083
Connection: keep-alive
Accept: */*
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type
Origin: http://192.168.161.31:8080
Sec-Fetch-Mode: cors
Referer: http://192.168.161.31:8080/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
1234567891011

服务端支持CROS之后, 给出的部分响应头如下

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: content-type
Access-Control-Allow-Methods: GET,HEAD,POST,PUT,DELETE,OPTIONS
Access-Control-Allow-Origin: http://192.168.161.31:8080
Access-Control-Max-Age: 3600
Allow: GET, HEAD, POST, PUT, DELETE, OPTIONS, PATCH
Connection: keep-alive
Content-Length: 0
Date: Thu, 14 Jan 2021 12:04:29 GMT
Keep-Alive: timeout=60
Vary: Origin
Vary: Access-Control-Request-Method
Vary: Access-Control-Request-Headers
12345678910111213

注意响应头中有一个 Access-Control-Allow-Origin 字段, 用来记录可以访问该资源的域, 当浏览器收到这样的响应头信息之后, 就会提取该字段的值, 发现该字段的值包含当前页面所在的域, 就知道这次的跨域是可以被允许的, 因此就不在对前端的跨域请求进行限制.
在跨域的整个过程中, 不需要对前端的代码进行修改, 主要是后端进行处理.

欢迎批评指正
敬礼!

参考资源:
SpringBoot升级2.4.0所出现的问题:When allowCredentials is true, allowedOrigins cannot contain the specia
CORS详解
SpringBoot + Vue全栈开发实战

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

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

相关文章

如何在 Linux 中配置 firewalld 规则

什么是FirewallD “firewalld”是firewall daemon。它提供了一个动态管理的防火墙&#xff0c;带有一个非常强大的过滤系统&#xff0c;称为 Netfilter&#xff0c;由 Linux 内核提供。 FirewallD 使用zones和services的概念&#xff0c;而 iptables 使用chain和rules。与 ip…

【LLM-RAG】知识库问答 | 检索 | embedding

note RAG流程&#xff08;写作论文中的background&#xff1a;公式设定、emb、召回内容、召回基准&#xff09;&#xff08;工作中的思路&#xff1a;嵌入模型、向量存储、向量存储检索器、LLM、query改写、RAG评测方法&#xff09;仅为个人关于RAG的一些零碎总结&#xff0c;…

【网络面试(4)】协议栈和套接字及连接阶段的三次握手原理

1. 协议栈 一直对操作系统系统的内核协议栈理解的比较模糊&#xff0c;借着这一篇博客做一下简单梳理&#xff0c; 我觉得最直白的理解就是&#xff0c;内核协议栈就是操作系统中的一个网络控制软件&#xff0c;就是一段程序代码&#xff0c;它负责和网卡驱动程序交互&#xff…

Docker 从入门到实践:Docker介绍

前言 在当今的软件开发和部署领域&#xff0c;Docker已经成为了一个不可或缺的工具。Docker以其轻量级、可移植性和标准化等特点&#xff0c;使得应用程序的部署和管理变得前所未有的简单。无论您是一名开发者、系统管理员&#xff0c;还是IT架构师&#xff0c;理解并掌握Dock…

7.11全排列(LC46-M)

算法&#xff1a; 排列和组合很像&#xff0c;但是有顺序。 还是用回溯算法。 与组合不同之处&#xff08;无startindex&#xff0c;有used数组&#xff09;&#xff1a; 首先排列是有序的&#xff0c;也就是说 [1,2] 和 [2,1] 是两个集合。 可以看出元素1在[1,2]中已经使…

大学物理II-作业1【题解】

1.【单选题】——考查高斯定理 下面关于高斯定理描述正确的是&#xff08;D &#xff09;。 A.高斯面上的电场强度是由高斯面内的电荷激发的 B.高斯面上的各点电场强度为零时&#xff0c;高斯面内一定没有电荷 C.通过高斯面的电通量为零时&#xff0c;高斯面上各点电场强度…

基于被囊群算法优化的Elman神经网络数据预测 - 附代码

基于被囊群算法优化的Elman神经网络数据预测 - 附代码 文章目录 基于被囊群算法优化的Elman神经网络数据预测 - 附代码1.Elman 神经网络结构2.Elman 神经用络学习过程3.电力负荷预测概述3.1 模型建立 4.基于被囊群优化的Elman网络5.测试结果6.参考文献7.Matlab代码 摘要&#x…

2023-12-15 LeetCode每日一题(反转二叉树的奇数层)

2023-12-15每日一题 一、题目编号 2415. 反转二叉树的奇数层二、题目链接 点击跳转到题目位置 三、题目描述 给你一棵 完美 二叉树的根节点 root &#xff0c;请你反转这棵树中每个 奇数 层的节点值。 例如&#xff0c;假设第 3 层的节点值是 [2,1,3,4,7,11,29,18] &…

lambda表达式和包装器

正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 我们在使用库里的排序算法时如果排序的是自定义类型或者库里默认的排序不能满足我们则需求&…

系统学习Python——装饰器:函数装饰器-[装饰器状态保持方案:函数属性]

分类目录&#xff1a;《系统学习Python》总目录 如果我们没有在使用Python3.X并因此无法利用一条nonlocal语句&#xff0c;或者我们希望代码具有可移植性&#xff0c;能在Python3.X和Python2.X上同时工作一一我们仍然能够针对某些可改变的状态使用函数属性来避免使用全局变量和…

【力扣100】46.全排列

添加链接描述 class Solution:def permute(self, nums: List[int]) -> List[List[int]]:# 思路是使用回溯if not nums:return []def dfs(path,depth,visited,res):# 出递归的条件是当当前的深度已经和nums的长度一样了&#xff0c;把path加入数组&#xff0c;然后出递归if …

【算法】数论---快速幂

什么是快速幂&#xff1f; 快速幂:快速求a^b % p的值,时间复杂度:O(logb) 一、暴力写法--- 循环b次求出a^b mod p (时间复杂度:O(b)) int a,b,p; cin>>a>>b>>p;long long res1;while(b--)res res * a %p;cout<<res<<endl;二、快速幂&#xff…

HTML与CSS

目录 1、HTML简介 2、CSS简介 2.1选择器 2.1.1标签选择器 2.1.2类选择器 2.1.3层级选择器(后代选择器) 2.1.4id选择器 2.1.5组选择器 2.1.6伪类选择器 2.2样式属性 2.2.1布局常用样式属性 2.2.2文本常用样式属性 1、HTML简介 超文本标记语言HTML是一种标记语言&…

帆软报表如何灵活控制水印的显示

在帆软报表中如果要显示水印,如果要全部都要显示,只需要到决策系统--安装设置中打开水印开关。如果想要某个报表显示水印,可以在设计器的水印设置中为该报表设置水印。 但是如果碰到这种需求,比如某些人或者某些角色需要显示水印,其他人不显示。或者是预览报表需要显示水印…

Windows系统历史版本简介

Windows是由微软&#xff08;Microsoft&#xff09;开发的一系列操作系统的名称。以下是Windows系统的历史版本简介&#xff1a; 1. **Windows 1.0 (1985):** - 首个发布的Windows版本。 - 图形用户界面&#xff08;GUI&#xff09;的引入&#xff0c;包括窗口、图标和…

Linux 系统参数和变量配置

一、常见系统参数配置 &#xff08;一&#xff09;用户系统资源限制 文件路径&#xff1a;/etc/security/limits.conf 常见配置&#xff1a; 对appuser做资源限制appuser soft nofile 655360对所有用户做资源限制* soft nofile 655360对用户组做限制student hard nofile 65…

[附代码]稳态视觉诱发电位SSVEP之预训练模型提高性能

SSVEP 之深度学习 深度学习已经被广泛运用在脑电信号分析来提高脑机接口的性能,这是一个end-to-end的方法,简单来说,只要搭建好深度学习网络,做好特征工程,然后分类即可,对于一个刚刚接触脑机接口领域深度学习的学习者来说,可以先忽略中间的数学相关的东西,先建一个网…

软件测试/测试开发丨Linux 数据处理三剑客学习笔记

一、Linux 三剑客之 grep 1、 内容检索 获取行&#xff08;单行&#xff09; grep pattern file获取内容 grep -o pattern file获取上下文 grep -A -B -C pattern file 2、 文件检索 递归搜索 grep pattern -r dir/展示匹配文件名 grep -H 111 /tmp/1只展示匹配文件名 grep …

HTML进阶

列表、表格、表单 文章目录 列表、表格、表单01-列表无序列表有序列表定义列表 02-表格表格结构标签-了解合并单元格 03-表单input 标签input 标签占位文本单选框上传文件多选框下拉菜单文本域label 标签按钮 04-语义化无语义的布局标签有语义的布局标签 05-字符实体 01-列表 …

影视后期:Pr 调色处理之风格调色

写在前面 整理一些影视后期相关学习笔记博文为 Pr 调色处理中风格调色&#xff0c;涉及下面几个Demo 好莱坞电影电影感调色复古港风调色赛博朋克风格调色日系小清晰调色 理解不足小伙伴帮忙指正 简单地说就是害怕向前迈进或者是不想真正地努力。不愿意为了改变自我而牺牲目前所…