springboot跨域踩坑笔记

news2024/11/15 19:55:26

事情是这样的,我在进行前后端联调的时候,发送了跨域拦截

在这里插入图片描述
马上在spring项目中创建一个CorsConfig

package com.example.demo.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        System.out.println("1");
        registry.addMapping("/**")
                .allowedOrigins("http://localhost:8081")
                .allowedHeaders("*")
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH");

        System.out.println("2");
    }

}


一顿操作猛如虎,结果还是不行……

原来,是我把事情想复杂了!
没仔细看看报错的内容
在这里插入图片描述

这个错误信息是浏览器中的跨域资源共享(CORS)机制的一部分,它指示在进行跨域请求时出现了问题。让我解释一下每个部分的含义:

  1. Response to preflight request:
    这部分指的是在执行实际的跨域请求之前,浏览器会发送一个预检请求(preflightrequest)以确定服务器是否允许跨域请求。这个预检请求是一种 OPTIONS 请求,包含一些头信息,以及请求的方法等信息。

  2. Doesn’t pass access control check: 这表示预检请求没有通过访问控制检查。在 CORS
    中,服务器必须设置适当的响应头来明确指示是否允许来自不同源的请求。

  3. No ‘Access-Control-Allow-Origin’ header is present on the requested
    resource: 这是错误的核心信息。它表示在预检请求的响应中,没有设置名为’Access-Control-Allow-Origin’的响应头。这个响应头用于指定允许访问该资源的源(域名)。如果该响应头不存在或不包含当前源的域名,浏览器将拒绝访问该资源。

简而言之,就是服务端需要接受这个请求,将数据返回给客户端
在过滤器添加以下代码:

servletResponse.setHeader("Access-Control-Allow-Origin", "*");

过滤器源码

package com.example.demo.filter;

import com.alibaba.fastjson.JSONObject;
import com.example.demo.entity.Result;
import com.example.demo.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 LoginCheckFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest req=(HttpServletRequest) servletRequest;
        HttpServletResponse resp=(HttpServletResponse) servletResponse;

        ((HttpServletResponse) servletResponse).setHeader("Access-Control-Allow-Origin", "*");
        ((HttpServletResponse) servletResponse).setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");;
        ((HttpServletResponse) servletResponse).setHeader("Access-Control-Allow-Headers", "AC-User-Agent, token, content-type");
        String url=req.getRequestURI().toString();
        log.info("请求url:{}",url);

        if(url.contains("login")){
            System.out.println("放行");
            log.info("放行");
            filterChain.doFilter(servletRequest,servletResponse);
            return;
        }

        String jwt=req.getHeader("token");
        if(!StringUtils.hasLength(jwt)){
            Result error=Result.error("NOT_LOGIN");
            String nologin= JSONObject.toJSONString(error);
            resp.getWriter().write(nologin);
            return;
        }

        try {
            JwtUtils.parseJWT(jwt);
        }catch (Exception e){
            e.printStackTrace();
            log.info("返回未登录信息");
            Result error=Result.error("NOT_LOGIN");
            String nologin= JSONObject.toJSONString(error);
            resp.getWriter().write(nologin);
            return;
        }

        filterChain.doFilter(servletRequest,servletResponse);

    }
}

最后,项目顺利运行!!!

在这里插入图片描述

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

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

相关文章

聚观早报 | 抢先体验阿维塔11座舱;本田和讴歌采用NACS充电标准

【聚观365】8月21日消息 抢先体验阿维塔11鸿蒙座舱 本田和讴歌采用特斯拉NACS充电标准 华为秋季新品发布会将于9月12日举行 iQOO Z8即将到来 三星Galaxy S24系列外观或更改 抢先体验阿维塔11鸿蒙座舱 当前,智能座舱成了各大巨头跑马圈地的重要领域。根据毕马威…

国标GB28181安防视频平台EasyGBS通过对应密钥上传到其他平台展示的详细步骤来啦!

国标GB28181协议视频平台EasyGBS是基于国标GB28181协议的视频云服务平台,支持多路设备同时接入,并对多平台、多终端分发出RTSP、RTMP、FLV、HLS、WebRTC等格式的视频流。平台可提供视频监控直播、云端录像、云存储、检索回放、智能告警、语音对讲、平台级…

C# 使用递归方法实现汉诺塔步数计算

C# 使用递归方法实现汉诺塔步数计算 Part 1 什么是递归Part 2 汉诺塔Part 3 程序 Part 1 什么是递归 举一个例子:计算从 1 到 x 的总和 public int SumFrom1ToX(int x) {if(x 1){return 1;}else{int result x SumFrom1ToX_2(x - 1); // 调用自己return result…

交换机常见配置、H3C防火墙配置

真机演示学习 console线连接之后,检查电脑有无console线对应的驱动,无则根据型号去网上下载驱动 交换机的端口类型是百兆还是千兆(e为百兆,g为千兆): 如果是百兆端口,那么调试时的接口名称就…

FastViT:一种使用结构重新参数化的快速混合视觉变换器

文章目录 摘要1、简介2、相关工作3、体系结构3.1、概述3.2、FastViT3.2.1、重新参数化跳过连接3.2.2、线性训练时间过参数化3.2.3、大核卷积 4、实验4.1、图像分类4.2、鲁棒性评价4.3、3D Hand网格估计4.4、语义分割和目标检测 5、结论 摘要 论文:https://arxiv.or…

为什么20位数据总线决定寻址空间是2^20B,即1MB,而不是2^20/2^3=2^17B????

升级版的说明 –升级了一下图片;增加了对按字节编制的默认设定的说明,免得引起误导;去掉了之前评论区有人说单位的问题。 老版链接: http://t.csdn.cn/pYIXD 小白的疑惑 小白刚开始学习的时候很疑惑,为什么20位地…

实验二 Hdoop2.7.6+JDK1.8+SSH的安装部署与基本操作

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

电商系统架构设计系列(九):如何规划和设计分库分表?

上篇文章中,我给你留了一个思考题:分库分表该如何设计? 今天这篇文章,我们来聊一下如何规划和设计分库分表,以及要考虑哪些问题。 引言 当要解决海量数据的问题,就必须要用到分布式的存储集群了&#xff…

银河麒麟服务器版ky10 server arm版设置网卡开机自启

cd /etc/sysconfig/network-scripts 命令进入制定路径 pwd 查看当前路径 ip a命令查看网卡信息,确认用到的网卡是哪一张 ls 查看网卡配置文件 ,找到名称跟 ip a 查询出来的一致的网卡 修改对应网卡 vi *0f0:网卡后缀对应上即可 修改网卡开…

【LeetCode】224. 基本计算器

224. 基本计算器(困难) 方法:双栈解法 思路 我们可以使用两个栈 nums 和 ops 。 nums : 存放所有的数字ops :存放所有的数字以外的操作,/- 也看做是一种操作 然后从前往后做,对遍历到的字符做…

亥姆霍兹线圈在各行业中的作用

亥姆霍兹线圈是指两个相同的同轴圆形线圈,它们的圆心之间相隔一个相同的距离,并且电流的方向相反。亥姆霍兹线圈的作用非常广泛,不仅在物理学实验中得到广泛应用,而且在医学磁共振成像、电子学和通信领域中也有广泛的应用。 亥姆霍…

java学习——二叉树

二叉树的种类: 满二叉树:如果一棵二叉树只有度为0的结点和度为2的结点,并且度为0的结点在同一层上,则这棵二叉树为满二叉树。 完全二叉树:在完全二叉树中,除了最底层节点可能没填满外,其余每层…

代码随想录第27天|39. 组合总和,40.组合总和II,131.分割回文串

39. 组合总和 分析这道题的搜索过程如下: 因为这道题没有限制要搜索几层,所以可以一直搜索直到sumtarget或者sum>target就return 回溯三部曲 1.递归函数参数 本题还需要startIndex来控制for循环的起始位置,对于组合问题,什么…

净水器赛道迈向“柠檬市场”,易开得彰显自己的“价值主张”

作者 | 曾响铃 文 | 响铃说 一直以来,关于第一台净水器的诞生都有着不小的争论,有说是因为19世纪的一场霍乱,也有说是因为20世纪的水污染,但无论哪种说法,恰恰也说明净水产品在人类近代发展历程中都有着举足轻重的地…

从2023年世界机器人大会发现机器人新趋势

机器人零部件为何成2023年世界机器人大会关注热门? 在原先,机器人的三大核心零部件是控制系统中的控制器、驱动系统中的伺服电机和机械系统中的精密减速器。如今,机器人的主体框架结构已经落实,更多机器人已经开始深入到各类场景中…

题目——单身狗们!

目录 题目要求: 题目内容: 思路展开: 代码演示: 题目要求: 一个数组中只有两个数字是出现一次,其他所有数字都出现了两次编写一个函数找出这两个只出现一次的数字。 题目内容: 有数组的元素是…

分类预测 | MATLAB实现SCNGO-CNN-LSTM-Attention数据分类预测

分类预测 | MATLAB实现SCNGO-CNN-LSTM-Attention数据分类预测 目录 分类预测 | MATLAB实现SCNGO-CNN-LSTM-Attention数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.SCNGO-CNN-LSTM-Attention数据分类预测程序,改进算法,融合正余弦和…

谈一谈浏览器与Node.js中的JavaScript事件循环,宏任务与微任务机制

JavaScript中的异步代码 JavaScript是一个单线程非阻塞的脚本语言。这代表代码是执行在一个主线程上面的。但是JavaScript中有很多耗时的异步操作,例如AJAX,setTimeout等等;也有很多事件,例如用户触发的点击事件,鼠标…

javaScript:对函数的认识与应用

目录 一.前言 二.函数介绍 A.函数的分类 1.自定义函数 示例 2.匿名函数 声明匿名函数 计时器也是匿名函数 3.立即执行函数 解释 示例 B.函数的返回值 没有参数,没有返回值的函数 示例 没有参数,有返回值的函数 示例 有参数,有…

Transformer在医学影像中的应用综述-分割

文章目录 Transformers in Medical Imaging: A Survey摘要方法手工的方法基于卷积的方法基于Transformer的方法影像分割2D3D 多器官分割纯transformer混合Transformer单规模结构transformer在编码器中Transformer在编码器和解码器之间Transformer在编码器和解码器中Transformer…