SpringBoot解决跨域方式

news2025/1/12 18:19:46
跨域是指在 Web 应用中,一个服务器资源或应用访问另一个服务器资源或应用的资源时候。由于浏览器的同源策略,一般情况下同一个域中的网站或应用可以互相访问资源,但跨域访问会被浏览器拒绝。

浏览器出于安全考虑,会限制跨域访问,就是不允许跨域请求资源,要求协议,IP和端口必须都相同,其中有一个不同就会产生跨域问题,这就是同源策略。

跨域的产生原因包括:

1、不同的域名:同一个网站或应用如果使用不同的域名,则会产生跨域。
不同的协议:如果两个网站或应用使用的协议不同(如 HTTP 和 HTTPS),也会产生跨域。
2、不同的端口:同一个域名,如果使用不同的端口号,也会产生跨域。

请求方(前端)相应方(服务器)是否跨域原因
http://www.jshuai.comhttp://www.jshuai.com/test.html协议,域名,端口号相同
http://www.jshuai.comhttps://www.jshuai.com/test.html协议不相同
http://www.jshuai.comhttp://www.jshuainihao.com/test.html域名不相同
http://www.jshuai.comhttp://www.jshuai.com/test.html主域名相同子域名不相同
http://www.jshuai.com:8080http://www.jshuai.com:8081/test.html端口号不相同

在这里插入图片描述

解决方案:

JSONP:

JSONP 是一种前端的解决方案虽然也能解决跨域问题,但是有局限性。他只能解决get方式的请求,不支持其他请求。

CORS:

CORS(Cross-Origin Resource Sharing)是一种服务端跨域解决方案,通过在 HTTP 头中添加特殊的 Access-Control-* 字段,允许浏览器进行跨域访问。

CORS解决方案:

(1)、第一种通过注解:

在接口层或者在其接口层方法上面添加一个注解 @CrossOrigin但是,有局限性。
@RestController
@CrossOrigin(origins="http://localhost:8081")//并在注解中指明哪一个前端的地址域名。也可以 "*" 代表所有
public class CorsController {
    @GetMapping("/getcors")
    public  String hello(){
        return "hello cors";
  
        每一个接口都得配,比较有局限性,不推荐。

(2)、添加跨域配置类:

@Configuration
public class GlobalCorsCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        //1. 添加 CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
        //放行哪些原始域
        config.addAllowedOriginPattern("*");//SpringBoot2.4.0后的写法
       // config.addAllowedOrigin("*");
        //是否发送 Cookie
        config.setAllowCredentials(true);
        //放行哪些请求方式
        config.addAllowedMethod("*");
        //放行哪些原始请求头部信息
        config.addAllowedHeader("*");
        //暴露哪些头部信息
        config.addExposedHeader("*");
        //2. 添加映射路径
        UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
        corsConfigurationSource.registerCorsConfiguration("/**",config);
        //3. 返回新的CorsFilter
        return new CorsFilter(corsConfigurationSource);
    }
}

(3)、实现WebMvcConfigurer接口:(推荐)

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")//哪些接口允许他跨域, "/**" 代表所有。
                //是否发送Cookie
                .allowCredentials(true)
                .allowedorigins("http://localhost:8081")//哪些域名允许他跨域, "/**" 代表所有。
                .allowedHeaders("*")//哪些请求头允许他跨域
            	.allowedMethods("*")//允许方法
                .Maxage("设置时间");//有效时间
        /**
        	有效时间的作用: 比方说送 put 的请求,首先浏览器会发送一个叫探测请求的东西,这个探测请求会发送到服务器上面。看服务器是否支持这个 Put 的请求,支         持才会发起 Put请求。这样我们可以给这个 put 请求设置一个有效时间,如果在规定的有效时间内再次发送put请求就不用再发送这个探测请求的东西了 
        */
        
            
    }
}

在这里插入图片描述

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

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

相关文章

深度学习领域的多任务学习综述

文章目录前言1. 什么是多任务学习?2. 为何要使用多任务学习?3. 多任务学习有哪些类型?3.1 基于硬参数共享的多任务学习3.2 基于软参数共享的多任务学习4. 为什么多任务学习能提升模型的性能?4.1 隐藏数据扩充(Implicit…

关于sudo配置

前言这里做一个小补充,主要讲一下关于利用sudo对指令提权以及普通用户无法使用sudo指令的问题。在前面的文章【Linux】一文掌握Linux权限中,我们讲到了关于权限的一些问题。我们知道root身份下,一切畅通无阻,而权限只是用来限制我…

urp SpotLight 衰减方式扩展

背景: 解决默认spotLight 的衰减模式下, 在距离灯光特别近的时候,灯光过爆的情况 解决方法: 修改SpotLight的衰减方式 下图是unity给出的几种衰减模式以及图示: 其中InverseSquare是当前2021.2 unity版本中urp(12.1…

相恨见晚的办公插件神器,颠覆我们对辅助工具的认知

不坑盒子 这是一个非常好用的插件工具,专门应用在Word文档和wps,支持Office 2010以上的版本,操作也简单且实用。 不坑盒子下载及使用说明 一键排版功能 像是下面的自动排版功能,可以在配置里面先设定好需要的格式,…

结合java中的锁聊聊锁的本质

在操作系统里面,也会遇到什么信号量、互斥量,然后说利用互斥量、信号量可以实现锁的功能,而操作系统提供的原语有又mutex锁在学习数据库的时候,什么表锁、行锁、读锁、写锁、排它锁、意向锁、meta锁等等,各种各样的锁的…

mysql数据库limit的四种用法

文章目录前言一、语法二、参数说明三、常用示例-4种用法总结前言 mysql数据库中limit子句可以被用于强制select语句返回指定的记录数。limit接受一个或两个数字参数。参数必须是一个整数常量。如果给定两个参数,第一个参数指定第一个返回记录行的偏移量&#xff0c…

实践数据湖iceberg 第四十一课 iceberg的实时性-业界的checkpoint配置

系列文章目录 实践数据湖iceberg 第一课 入门 实践数据湖iceberg 第二课 iceberg基于hadoop的底层数据格式 实践数据湖iceberg 第三课 在sqlclient中,以sql方式从kafka读数据到iceberg 实践数据湖iceberg 第四课 在sqlclient中,以sql方式从kafka读数据到…

硬件系统工程师宝典(12)-----EMC应该知道的事

各位同学大家好,欢迎继续做客电子工程学习圈,今天我们继续来讲这本书,硬件系统工程师宝典。上篇我们说到在做电源完整性分析时去耦电容要遵循的规则,大电容的去耦半径大,小电容的去耦半径小,电容焊盘扇出时…

2023年java春招面试题及答案

2023年java春招面试题1、下面有关jdbc statement的说法错误的是?2、下面有关JVM内存,说法错误的是?3、下面有关servlet service描述错误的是?4、下面有关servlet和cgi的描述,说法错误的是?5、下面有关SPRIN…

Radio Link Monitoring(RLM)

欢迎关注微信同步公众号“modem协议笔记”。 这篇看下radio link monitoring相关的内容,就是UE进行DL radio link quality监听的规定,这部分与RLF的判定息息相关。市面上讲NR相关的书籍,多少都会涉及这部分内容,可能spec上这块的…

pdf免费转换工具,只需记住这3款就够了

PDF格式的文档在人们的办公过程中扮演着非常重要的角色,而PDF格式的文档之所以受到人们的青睐,是因为它不容易被篡改,可以用多种阅读器打开浏览。然而,在实际的应用过程中,我们不仅需要阅读PDF文档,也经常还…

HTTP压力测试概论

常用的HTTP服务压测工具介绍 在项目正式上线之前,我们通常需要通过压测来评估当前系统能够支撑的请求量、排查可能存在的隐藏bug,同时了解了程序的实际处理能力能够帮我们更好的匹配项目的实际需求,节约资源成本。 HTTP服务压力测试工具 在…

如何使用403bypasser绕过目标页面上的访问控制限制

关于403bypasser 403bypasser是一款自动化工具,该工具能够以自动化的形式实现针对目标页面的访问控制限制绕过技术。403bypasser项目目前仍处于积极开发阶段,并且还会增加新的功能。 该工具基于Python语言开发,因此具备良好的跨平台特性。 …

最好的 QML 教程,让你的代码飞起来!

想必大家都知道,亮哥一直深耕于 CSDN,坚持了好很多年,目前为止,原创已经 500 多篇了,一路走来相当不易。当然了,中间有段时间比较忙,没怎么更新。就拿 QML 来说,最早的一篇文章还是 …

基于云服务器的hexo博客搭建(稳)

文章目录序一、前置工具的准备域名购买及服务器购买二、搭建步骤1.配置服务器环境2.nginx 的配置4.git 及node.js安装1.安装node.js:2.安装Git及配置仓库1.安装git:5.本地主机配置(这里winr ,cmd,打开命令行操作)1.安装node.js2.安…

c++11 标准模板(STL)(std::unordered_set)(十二)

定义于头文件 <unordered_set> template< class Key, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator<Key> > class unordered_set;(1)(C11 起)namespace pmr { templ…

【计算机二级python】综合题目

计算机二级python真题 文章目录计算机二级python真题文本文件“红楼梦. txt”中包含了《红楼梦》小说前20章内容&#xff0c;“ 停用词. txt”包含了需要排除的词语。请修改模板&#xff0c;实现以下功能。‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬‪…

【安卓】安卓设备实现wifi display解决方案

看文章前&#xff0c;我们需要知道的几个概念&#xff1a; 1、Wifi Direct技术&#xff1b; 2、Wifi Display技术&#xff1b; 3、Miracast标准&#xff1b; 安卓手机用户都知道我们的安卓手机有一个wifi直连功能&#xff0c;在点击设置–》WIFI–》更多Wifi设置–》Wifi直连&a…

回顾2-JAVA的标识符和关键词

JAVA的标识符和关键词 标识符概念: 所有地方都需要名称 如: 类的名字>类名 如:变量的名字,方法的名字,特殊关键词语的名字 这些符号就是一种标识, 涵盖一些意思 简单理解, 就是一种标记,识别,的符号关键词 这些词语, 在JAVA程序中, 被赋予了特殊的意义, 使用时候要避开同名…

编写SPI设备驱动程序

编写SPI设备驱动程序 文章目录编写SPI设备驱动程序参考资料&#xff1a;一、 SPI驱动程序框架二、 怎么编写SPI设备驱动程序2.1 编写设备树2.2 注册spi_driver2.3 怎么发起SPI传输2.3.1 接口函数2.3.2 函数解析致谢参考资料&#xff1a; 内核头文件&#xff1a;include\linux\s…