前后端分离,后端用springboot遇到的跨域问题

前后端分离,springboot项目后台解决前台跨域问题 前后端分离,遇到跨域问题,java中的解决方案,前端不需要做跨域问题解决,后端去解决跨域问题。 只要在项目中添加一个过滤器就可以了,如下: import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import javax.servlet.*;... 阅读详情

前后端分离,后端用springboot遇到的跨域问题

对于前后端分离的项目来说,如果前端项目与后端项目部署在两个不同的域下,那么势必会引起跨域问题的出现。
什么是跨域?
跨域,指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器施加的安全限制。简单来说就是不同域名之间相互访问

同源策略:请求的url地址,必须与浏览器上的url地址处于同域上,也就是域名,端口,协议相同.

例如:
http://www.a.com 要访问 http://www.b.com 这样域名不同,属于跨域
http://www.a.com:8081/index.html调用http://www.a.com:8080的接口 这样端口号不同 也属于跨域
http://www.a.com:访问https://www.a.com 这样也是属于跨域 协议不一样

所以在以前前后端不分离的开发模式中,从来不用关注这个问题,因为所有的请求都是在同一个域内

综合了网上解决跨域的方式目前有两种

  1. 使用JSONP
    不过我不太推荐使用,JSONP只支持GET请求,不管是对于前端还是后端来说,写法与我们平常的ajax写法不同,同样后端也需要作出相应的更改。
    JSONP的优势在于支持老式浏览器,以及可以向不支持CORS的网站请求数据。

  2. 通过cors协议解决跨域问题
    CORS支持所有类型的HTTP请求。
    这个也是我非常推荐大家使用的方法
    下面我来说下项目中遇到的问题
    前端:vue.js
    后端:springboot

前端请求接口时,报错信息如下
Origin ‘http://localhost:8080’ is therefore not allowed access.
The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute
解决方法:
前端请求开启 withCredentials: true
后台接口也需要对应的将 Access-Control-Allow-Credentials 设为 true。

前端携带token传后端时报错
Request header field token is not allowed by
Access-Control-Allow-Headers in preflight response.
这是由于请求头内并没有这个名叫token的请求头字段
默认情况下,只有六种 simple response headers (简单响应首部)可以暴露给外部:
Cache-Control Content-Language Content-Type Expires Last-Modified Pragma
如果想要让客户端可以访问到其他的首部信息,可以将它们在
Access-Control-Expose-Headers 里面列出来。

所以解决方法是:
在Access-Control-Allow-Headers添加自定义的请求头字段Token
如果还有其他请求头字段需要使用,也是需要在Access-Control-Allow-Headers添加,不然服务器是不允许的

后面还有一个问题:
Response to preflight request doesn’t pass access control check:
No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
Origin ‘http://localhost:8080’ is therefore not allowed access.
The response had HTTP status code 503.
这个是请求头返回服务不可用

解决方式:
我看了下代码原来是我写了两个跨域过滤一个是用写过滤器Filter,一个是继承
webmvcconfigureradapter然后我注释了其中一个就可以了,我想应该是两个跨域处理器冲突了

拓展
现在开发客户端都是发非简单请求
非简单请求是那种对服务器有特殊要求的请求,比如请求方法是PUT或DELETE,或者
Content-Type字段的类型是application/json。也就是通过json数据交互
非简单请求的CORS请求,会在正式通信之前,增加一次HTTP查询请求,称为"预检"请求(preflight)。

流程
浏览器先询问服务器,当前网页所在的域名是否在服务器的许可名单之中,以及可以使用哪些HTTP动词和头信息字段。只有得到肯定答复,浏览器才会发出正式的
XMLHttpRequest请求,否则就报错。

"预检"请求用的请求方法是OPTIONS,表示这个请求是用来询问的。头信息里面,关键字段是Origin,表示请求来自哪个源。
一般不特殊指定源的话都将Access-Control-Allow-Origin设置为*
除了Origin字段,"预检"请求的头信息包括两个特殊字段。
(1)Access-Control-Request-Method
该字段是必须的,用来列出浏览器的CORS请求会用到哪些HTTP方法
所使用到的方法也是要在跨域处理器中说明
也就是在Access-Control-Allow-Methods中加入各种请求方法
例如:POST PUT, GET, OPTIONS, DELETE
(2)Access-Control-Request-Headers
该字段是一个逗号分隔的字符串,指定浏览器CORS请求会额外发送的头信息字段
这个上面有说到,项目需要什么额外的请求头字段就添加上去
服务器收到"预检"请求以后,检查了Origin、Access-Control-Request-Method和
Access-Control-Request-Headers字段以后,确认允许跨源请求,就可以做出回应。
说了这么
我分享下我的跨域处理的代码(我这里是使用过滤器的写法,也可以使用继承
webmvcconfigureradapter的方法)

@Component
public class CorsFilter implements Filter {

    /*跨域请求配置*/
    @Override
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        HttpServletResponse response = (HttpServletResponse) res;

        HttpServletRequest reqs = (HttpServletRequest) req;
        response.setHeader("Access-Control-Allow-Origin","*");
        response.setHeader("Access-Control-Allow-Credentials", "true");
        response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
        response.setHeader("Access-Control-Max-Age", "5000");
        response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,Authorization,Token");
        chain.doFilter(req, res);
    }
    @Override
    public void init(FilterConfig filterConfig) {}
    @Override
    public void destroy() {}
}

继承webmvcconfigureradapter的方法

@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").allowedOrigins("*").allowedMethods("GET", "POST", "OPTIONS", "PUT")
                .allowedHeaders("Content-Type", "X-Requested-With", "accept", "Origin", "Access-Control-Request-Method",
                        "Access-Control-Request-Headers")
                .exposedHeaders("Access-Control-Allow-Origin", "Access-Control-Allow-Credentials")
                .allowCredentials(true).maxAge(3600);
    }
}

注:以上写法二选一即可,两个都写估计还是会冲突,两者作用一样只是写法不同
装载自: 意识流丶(https://www.jianshu.com/p/a02500ef1446)

SpringBoot配置CORS处理前后端分离的跨域问题 CORS是一个W3C标准,全称是"跨域资源共享它允许浏览器向跨源服务器,发出请求,从而克服了AJAX只能同源使用的限制。CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。浏览器端:目前,所有浏览器都支持该功能(IE10以下不行)。整个CORS通信过程,都是浏览器自动完成,不需要用户参与。CORS通信与Ajax没有任何差别,因此你不需要改变以前的业务逻辑。只不过,浏览器会在请求中携带一些头信息,我们需要以此判断是否允许其跨域,然后在响应头中加入一些信息即可。 阅读详情

相关推荐

别再折腾SNAP了!ENVI 5.6.0 直接拖拽打开Sentinel-2 L2A数据的正确姿势

本文详细介绍了ENVI 5.6.0直接处理Sentinel-2 L2A数据的高效方法,无需通过SNAP进行繁琐的重采样预处理。通过直接拖拽XML文件,用户可以快速加载不同分辨率的波段数据,显著提升工作效率。文章还对比了直接打开与SNAP重采样流程的优劣,并提供了常见问题解决方案和高级应用技巧。

weixin_30296405的博客 633

Origin 'http://localhost:8080' is therefore not allowed access

Failed to load https://qdyhdfw.beway.cn/api/start?cifNo=: No ‘Access-Control-Allow-Origin’ header is present on the requested resource. Origin ‘http://localhost:8080’ is therefore not allowed access.比...

hk_life的博客 1万+

MIL-STD-1553B协议解析与工程实践指南

MIL-STD-1553B作为军用航空电子系统的核心通信协议,采用命令/响应式串行总线架构,通过双冗余设计实现高可靠性数据传输。该协议定义了三类终端设备(总线控制器、远程终端、总线监视器)和六种标准消息格式,典型应用包括飞行控制系统、导航设备等关键航电组件的实时数据交互。深入解析模式代码机制和状态字位域定义,其中传输向量字(10000)和同步命令(00001)等关键指令在分布式系统时间对齐、故障诊断等场景发挥重要作用。工程实践中需特别注意78Ω终端阻抗匹配、4-12μs响应时间窗口等硬性指标,结合变压器耦合

weixin_33431149的博客 433

springboot 跨域问题

spring boot 跨域解决方案

qq_43779511的博客 2352

Origin2018(汉化版)在使用科学计数法的时候如何将坐标刻度的0.0改成0

文章目录1 问题2 解决方法 1 问题 先看下面这张图,当我使用科学计数法时,纵坐标出现了0.0的字样,这样看起来很不美观。有些期刊还会有要求,不能出现0.0的格式。 图1 那么该怎么将它改成0呢?首先让我们尝试着用Origin自带的属性,看看能不能设置。 2 解决方法 解决方法一: step1: 双击坐标轴,打开坐标轴属性设置。 step2: 在刻度线标签选项中设置左轴的显示 图2 会发现,按照图2的方式改好之后,其它的小数位也全没了,如果但是有些数字就被覆盖了,这显然不是我

qq_40077565的博客 2万+

Unity URP管线下的Highlight Plus插件,从导入到实现物体高亮的保姆级避坑指南

本文详细解析了在Unity URP管线中使用Highlight Plus插件实现物体高亮的完整流程与常见问题解决方案。从URP环境配置、插件导入避坑到相机设置优化,提供了一套完整的保姆级指南,帮助开发者高效解决高亮效果不显示等典型问题,并包含移动端性能优化与复杂场景管理的高级技巧。

weixin_27379781的博客 408

SpringBoot ---- 跨域遇到的问题

Access to XMLHttpRequest at ‘http://localhost:88/api/sys/login’ from origin ‘http://localhost:8001’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the

qq_43661408的博客 787

保姆级教程:用Docker Compose一键部署WVP-PRO+ZLM+录像服务(含Nginx反代)

本文提供了一套完整的容器化GB28181视频平台部署方案,通过Docker Compose实现WVP-PRO、ZLMediaKit(ZLM)和录像服务的一键式部署。详细介绍了环境准备、架构设计、容器化部署实战以及高级配置优化,帮助用户快速搭建高性能视频监控管理平台,适用于安防行业和物联网设备管理场景。

weixin_30415113的博客 861

spring配置CORS后未返回Access-Control-Allow-Origin的踩坑解决

  在 Spring 框架下解决 CORS 问题,前面试了两种方法,发现在一种场景下,HTTP Response header 始终未应答 Access-Control-Allow-Origin:*   (1)第一种方式,通过在 Controller 层增加 @CrossOrigin 注解。 @CrossOrigin @RestController @RequestMapping("/file") public class FileController { ... }   (2)第二种方式,利用 Sp

7549

CS 188 Project3(RL) Q10:Approximate Q-Learning

实现一个近似的Q-learning学习代理,它学习状态特征的权重,其中许多状态可能共享相同的特征。在qlearningAgents.py中的ApproximateQAgent类中编写实现,它是PacmanQAgent的子类。 注:近似Q-learning学习假设在状态和动作对上存在一个特征函数f(s,a),它产生一个向量f1(s,a) .. fi(s,a) .. fn(s,a)特征值。我们在fe...

大模型与Agent智能体 2655

手把手教你学Simulink——基于通信协议与标准的场景实例:卫星通信中的网络安全协议(IPSec)仿真

随着卫星通信在国防、金融、应急指挥、能源管网等关键领域的广泛应用,其安全性已成为系统设计的核心要求。然而,卫星链路具有广播特性、长距离传输、地面站分布广等特点,极易遭受窃听、篡改、重放、中间人攻击等网络威胁。传统的“信任链路层安全”已不足以应对现代网络攻击。为此,国际标准组织(如IETF、ETSI、CCSDS)推荐在卫星通信中部署协议,实现端到端的数据机密性、完整性、身份认证和抗重放保护。本文将手把手教你如何在中构建一个符合标准的仿真系统,涵盖从明文传输到加密隧道的完整安全链路建模。本文完整实现了。

MHD0815的博客 146

filter导致跨域失效_跨域问题,我使用了@Filters({@By(type=CrossOriginFilter.class)})无效= =...

public View match(ActionContext ac) {HttpServletResponse resp = ac.getResponse();if (!Strings.isBlank(this.origin)) {resp.setHeader("Access-Control-Allow-Origin", this.origin);}if (!Strings.isBlank(th...

weixin_39637059的博客 217

使用lightGBM进行数据建模及预测

在机器学习领域中,数据建模和预测一直是非常重要的任务。而lightGBM作为一种基于梯度提升算法的高效机器学习框架,被广泛应用于数据建模和预测中。本文将介绍如何使用lightGBM进行数据建模和预测。到此,我们已经成功使用lightGBM对数据进行了建模和预测。使用lightGBM可以快速、高效地完成数据建模和预测任务,是机器学习领域中不可或缺的工具之一。使用lightGBM进行数据建模及预测。

qq_37934722的博客 1016

SpringBoot解决前后端分离跨域问题:状态码403拒绝访问

前后端分离项目因为端口不一致造成状态码403异常,通过Spring Boot来解决此跨域问题

做技术人 · 产优质博客 · 找好工作 4989

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

springboot整合shiro-spring-boot-web-starter实现前后端分离的跨域问题

最近从github上发现一个不错的项目,项目使用的是springboot整合shiro-spring-boot-web-starter实现前后端分离技术, 但部署的启动后,出现了一些问题。 这里是借鉴的文章: https://segmentfault.com/a/1190000013630601 https://www.cnblogs.com/yfzhou/p/9813177.htm...

qq826303461的博客 6543

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

springboot+vue前后端分离跨域问题

这是我springbooot+vue前后端分离学习遇到跨域问题的解决方案,欢迎参考。

qq_57585993的博客 3565

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Spring boot前后端分离后,跨域问题怎么解决?

现在基于spring boot前后端分离的开发模式越来越普遍,那么,由于前后端分离引发的跨域问题,你知道怎么解决吗? 什么是跨域 跨域是指 不同域名之间相互访问。即浏览器控制当前网页下不能执行其他网站的脚本,这是由浏览器的同源策略造成的,是浏览器对JavaScript施加的安全限制。 也就是如果在A网站中,我们希望使用Ajax来获得B网站中的特定内容 如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题。 跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的。 同源策略 同源策略/S.

弹指天下 4512

springboot-vue前后端分离项目跨域session不一致的问题

1. springboot+vue前后端分离项目的跨域问题 2. springboot+vue前后端分离 项目跨域每次访问后端接口sessionid不一致的问题 如果在后端配置了跨域注解@CrossOrigin 如果直接前端访问后端的

oldlimu的博客 1万+

前后端分离Shiro + springboot跨域问题

前后端分离Shiro + springboot跨域问题问题- 修改请求头后请求两次:解决办法-跳过检测请求: 前后端分离项目 前端VUE 后台 springboot+shiro+mybatis 问题- 修改请求头后请求两次: 请求携带请求头后 VUE发送请求两次 , 第一次OPTIONS检测服务器状态后 , 再发送正常请求, 此时 shiro 会拦截不再白名单中的URI 的 OPTIONS请求...

东哥他爸的博客 1310

前后端分离项目中的跨域问题全解:以 Vue + Spring Boot 为例

​​这两个端口不一致就构成了“跨域请求”。**CORS(Cross-Origin Resource Sharing)**是浏览器与服务器之间的一种协议,允许浏览器向服务器发起跨域请求。它的核心是由后端服务器设置 HTTP 响应头,告诉浏览器:“这个请求我允许”。场景推荐方式本地开发Vue 代理 + Spring CORS 注解或全局配置项目上线部署使用 Nginx 做反向代理微服务架构使用 Spring Cloud Gateway 配置 CORS。

snowfoootball的博客 1554

spring boot + vue3 前后端分离处理跨域问题

1、什么是跨域 请求同域资源: 在协议,域名 (或 ip 地址)相同,端口号相同下的请求资源,可以看做是同域资源 请求跨域资源: 请求的资源只要 是协议、域名(或 ip 地址)、端口号中任意一个不同的资源都可以认为是跨域资源 如: 端口号不同 127.0.0.1:80与127.0.0.1:8888属于跨域 域名 (或 ip 地址) 不同 127.0.0.1:80与www.baidu.com:80属于跨域 2、前后端分离项目中的跨域问题 例如: 前端 vue项目...

骐骥一跃,不能十步;驽马十驾,功在不舍。 2981

springboot学习(一)spring boot 前后端分离,解决ajax跨域问题

使用spring boot + shiro + cas 配置了一套权限管理框架,要做到前端和后台分离,前端访问都是以ajax方式。这里涉及到了跨域问题,以下是解决方案。 后台: 1.定义跨域过滤器,如下: @Bean     public MyCrosFilter corsFilter() {         UrlBasedCorsConfigurationSource source =...

文若书生的专栏 1万+

Ajax+SpringBoot测试前后端分离,解决跨域问题

这两天用springboot和js做一个前后端分离的小项目,遇到了跨域问题 具体问题描述如下: 本地文件 register.html 中通过ajax向后台发起GET/POST请求实现一个简单的注册功能,分为两步: 发送手机号,获取验证码 填写信息,提交注册 遇到的问题是, 浏览器控制台显示: POST http://localhost:9000/user/register/otp/code 4...

余生愿你常欢笑 600

SpringBoot前后端分离的跨域问题

前端报错:has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is 解决代码: CorsConfig.java @Configuration public class CorsConfig extends WebMvcConfigurerAdapter { @Override public void...

qq_25613413的博客 382

springboot处理前后端分离时跨域问题

随着分布式微服务的兴起,越来越多的公司在开发web项目的时候选择前后端分离的模式开发,前后端分开部署,使得分工更加明确,彻底解放了前端。 我们知道,http请求都是无状态,现在比较流行的都是jwt的形式处理无状态的请求,在请求头上带上认证参数(token等),前后端分离有好处,也有坏处,第一次开发前后端分离项目的人,肯定会遇到前端请求跨域的问题,这个怎么处理呢?在说处理方案前,有必要说明一下为什么会跨域和什么是跨域? 一、为什么会跨域? 出于浏览器的同源策略限制。同源策略(Sameoriginp.

凡繁烦的博客 391

Java SpringBoot解决前后端分离项目的跨域问题

这边博客主要记录一下java中SpringBoot是如果解决跨越的问题,错误:onlineFund:1 Access to XMLHttpRequest at 'http://localhost:8088/user-userdetail/any/get' from origin 'http://localhost:8080' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the r

Wjhsmart的博客 1728
上一篇: SAP ABAP AT NEW 和AT END OF的用法
下一篇: Maven 打包 springboot docker image 到 Harbor 仓库
programer_bei
博客等级 码龄11年 13粉丝 36原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值