跨域问题(三种解决方法)

news2024/11/17 0:50:02

跨域就是一个域名的网页去请求另一个域名的资源,比如你刚刚在A网站输入了自己的账号密码,然后访问B网站,B网站无法获取账号密码

两个请求的协议(比如http),域名(比如说localhost或者192.168.0.0),端口号三者一模一样(其他可以不一样)才算两个请求在同一个域内,三者但凡有一个不一样都是跨域

前后端分离时,前端应用和后端应用是属于两个端口,此时前端工程调用后端工程的接口就会出现跨域问题

比如前端应用是http://localhost:8080,想要访问后端工程的一个list方法,即http://localhost:8181/list,结果会报错,显示:

其实后端是有接收到请求,也给前端工程返回了数据,但是浏览器收到之后拒绝前端读取响应数据

我们需要添加一些配置允许前端工程从浏览器中读取后端响应的数据

CORS:Cross Origin Resource Sharing 跨域资源共享

解决跨域问题有前端解决方案和后端解决方案,主要介绍后端解决方案:

1.在目标方法上添加@CrossOrigin注解

比如现在前端工程想要访问后端工程中的list方法,只需要在这个方法上面添加@CrossOrigin注解即可

GetMapping("list")
@CrossOrigin
public  List<String> list()
{
   return “Hello  World”;
}

2.添加CORS过滤器

如果要允许跨域访问的方法太多,一个一个加@CrossOrigin注解太麻烦了,所以直接设置一个过滤器

在配置类的包configuration中新建一个类CorsConfig

@Configuration
public class CorsConfig
{
   @Bean //注入到容器里面
   public  CorsFilter corsFilter()
   {
      CorsConfiguration corsConfiguration=new CorsConfiguration();
      
      //设置http头信息,允许前端工程从浏览器中读取响应

      corsConfiguration.addAllowedOrigin("*");//允许所有域访问
      
      corsConfiguration.addAllowedHeader("*");

      corsConfiguration.addAllowedMethod("*");

      UrlBasedCorsConfigurationSource source=new  UrlBasedCorsConfigurationSource();

      source.registerCorsConfiguration("/**",corsConfiguration);

      return new  CorsFilter(source);

   }

}

 而list方法对应的代码不用做任何变动(不需要@CrossOrigin注解)

3.实现WebMvcConfigurer接口的方式

在配置类的包中新建一个CorsConfiguration类,这个类实现WebMvcConfigurer接口,并且重写addCorsMappings方法

public class CorsConfiguration implements WebMvcConfigurer
{
    
  @Override
  public  void  addCorsMappings(CorsRegistry registry)
  {
    registry.addMapping("/**)
            .allowedOriginPatterns("*")
            .allowedMethods("GET","PUT","POST","DELETE","HEAD","OPTIONS")
            .allowedHeaders("*");
  }
}

 而list方法对应的代码不用做任何变动(不需要@CrossOrigin注解)

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

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

相关文章

python 时间

目录标题python的时间模块1、时间戳2、时间元组3、获取格式化的时间可以自定义输出格式日期格式化的符号4、显示某月的日历5、sleep模块python的时间模块 1、时间戳 时间戳&#xff0c;以1970为时间基准&#xff0c;但是太过于遥远的时间就不可以了&#xff0c;windows最源支持…

基于springboot实验室管理系统(程序+数据库)

大家好✌&#xff01;我是CZ淡陌。一名专注以理论为基础实战为主的技术博主&#xff0c;将再这里为大家分享优质的实战项目&#xff0c;本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路…

C进阶:征服指针之指针笔试题强化(3)

目录 ​​​​​​​ &#x1f432;T1. ​​​​​​​ ​​​​​​​ &#x1f916; T2. ​​​​​​​ ​​​​​​​ &#x1f42c; T3. ​​​​​​​ ​​​​​​​ &#x1f433; T4. ​​​​​​​ ​​​…

并发编程——5.共享模型之无锁

目录5.共享模型之无锁5.1.问题提出5.1.1.案例5.1.2.解决思路——锁5.1.3.解决思路——无锁5.2.CAS 与 volatile5.2.1.CAS5.2.2.volatile5.2.3.为什么无锁效率高5.2.4.CAS 的特点5.3.原子整数5.4.原子引用5.4.1.概述5.4.2.案例5.4.3.ABA 问题及解决5.5.原子数组5.6.字段更新器5.…

数位统计DP

目录 算法简介 算法讲解 数字计数 数位统计DP的递推实现 数位统计DP的记忆化搜索实现 算法实践 一 Windy数 二 手机号码 附录&#xff1a; 算法简介 数位统计 DP 用于数字的数位统计,是一种比较简单的 DP 套路题。 一个数字的数位有个位、十位、百位,等等,如果题目和…

Python3入门基础(03)数据结构

Python3 数据结构 Python3 中有四种标准的数据结构&#xff1a; List&#xff08;列表&#xff09;Tuple&#xff08;元组&#xff09;Set&#xff08;集合&#xff09;Dictionary&#xff08;字典&#xff09; Python 3 的六个标准数据类型中&#xff1a; 不可变数据&…

MATLAB算法实战应用案例精讲-【人工智能】语义分割

前言 语义分割是一种典型的计算机视觉问题,其涉及将一些原始数据(例如,平面图像)作为输入并将它们转换为具有突出显示的感兴趣区域的掩模。许多人使用术语全像素语义分割(full-pixel semantic segmentation),其中图像中的每个像素根据其所属的感兴趣对象被分配类别ID。…

跟领导提离职了,现在后悔,想留下来,怎么办?

提完离职后悔了&#xff0c;怎么办&#xff1f;是坚持不变&#xff0c;继续离开&#xff1f;还是厚着脸皮留下来&#xff1f;有些网友支持楼主留下&#xff0c;让他舔回去。有人说&#xff0c;等领导挽留&#xff0c;哪怕是做个样子&#xff0c;就同意留下来&#xff0c;如果完…

第9章 前端调用POST-Api注意事项

1 “ has been blocked by CORS policy: Response to preflight request doesnt pass access control check: It does not have HTTP ok status.”。异常 1.1 通过跨域策略解决 1.1.1 在appsettings.json文件中定义跨域策略配置 // 跨域(Cors)配置的域名及其端口集&#xff0…

央视春晚彩排的关键时刻,主持人朱军终于回归了

盼望着、盼望着&#xff0c;春节临近了&#xff0c;春晚的零点钟声即将开始敲响了。一年一度的央视春晚&#xff0c;已经开启了第一次彩排&#xff0c;众多明星都参与其中&#xff0c;看来今年的春晚要热闹了。 虽然只是第一次彩排&#xff0c;但是很多明星艺人都已经亮相&…

Colyseus:轻量级多人游戏免费开源解决方案

点击上方“青年码农”关注回复“源码”可获取各种资料Colyseus 是一个独特的多人游戏框架&#xff0c;被用于许多 H5 小游戏和手机游戏中&#xff0c;使用容易&#xff0c;且选项众多&#xff0c;可满足开发者多样化的需求。如果你在制作多人联网游戏时遇到过各种扩展性需求和细…

数据卷(Data Volumes)

目录 1.Docker宿主机和容器之间文件拷贝 利用MySQL镜像安装MySQL服务 从容器中拷贝文件到宿主机 从宿主机拷贝文件到容器 2.数据卷 3.数据卷容器 1.Docker宿主机和容器之间文件拷贝 利用MySQL镜像安装MySQL服务 docker run -p 3307:3306 --name mysql2 -di -v /home/…

Qt中用thrift验证flume

一.flume简介 flume是Cloudera提供的一个高可用的&#xff0c;高可靠的&#xff0c;分布式的海量日志采集、聚合和传输的系统。 在flume中分为了3个组件&#xff0c;分别为source&#xff0c;channel和sink。 Source是负责接收数据到Flume Agent的组件。Source组件可以处理各种…

在阿里做了7年软件测试原来是........

你了解软件测试岗吗&#xff1f; 很多人做测试3&#xff0c;5年&#xff0c;甚至年限多长。 但并不懂软件测试岗所要求的技术和能力&#xff0c;只是拘于当前的工作环境和培训班的宣传。 在一个微信里中看到如下的对话&#xff1a; 某人说&#xff0c;工作中开始做自动化了。…

8253练习题(8253端口地址怎么求?怎么求初值?怎么看出工作方式)

目录 一&#xff1a;简单&#xff08;题目把计数初值和工作方式都给你了&#xff09; 二&#xff1a;给了你输入时间周期和初值&#xff0c;你会不会求输出&#xff1f; 三&#xff1a;简单 四&#xff1a;初值计数方式都不给&#xff0c;初值还是给的时间和频率混合 五&a…

前端_swapCache方法 发布文章

swapCache方法 swapCache方法用来手工执行本地缓存的更新&#xff0c;它只能在applicationCache对象的updateReady事件被触发时调用&#xff0c;updateReady事件只有服务器上的manifest文件被更新&#xff0c;并且把manifest文件中所要求的资源文件下载到本地后触发。顾名思义…

[极客大挑战 2019]Secret File(BUUCTF)

前言: 这篇文章还是是为了帮助一些 像我这样的菜鸟 找到简单的题解 题目描述 解题工具: fiddler或burpsuite抓包 解题过程: 又是要找秘密&#xff0c; 先检查一下源代码 发现了一个链接与背景颜色融合了 点进去看看 找到了SECRET但肯定没这么简单 点击SECRET页面发生…

15. 我是怎么用一个特殊 Cookie ,限制住别人的爬虫的

爬虫训练场&#xff0c;第15篇博客。 博客详细清单&#xff0c;参考 https://pachong.vip/blog 本次案例&#xff0c;用定值 Cookie 实现反爬 文章目录Cookie 生成Python Flask 框架生成 CookieFlask make_response 加载模板Flask 判断指定 cookie 是否存在补充知识点Cookie 生…

【AcWing每日一题】4818. 奶牛大学

Farmer John 计划为奶牛们新开办一所大学&#xff01; 有 N 头奶牛可能会入学。 每头奶牛最多愿意支付 ci 的学费。 Farmer John 可以设定所有奶牛入学需要支付的学费。 如果这笔学费大于一头奶牛愿意支付的最高金额&#xff0c;那么这头奶牛就不会入学。 Farmer John 想赚…

C++ New和Delete

目录 前言 New Delete 前言 new是c中用于动态申请空间的运算符&#xff0c;malloc也是用于动态申请空间的&#xff0c;但malloc是函数。 New new是用来开辟一段新空间的&#xff0c;和一般申明不同的是&#xff0c;new开辟的新空间是在堆上&#xff0c;而申明的变量是在栈上…