Spring Boot进阶(38):SpringBoot之跨域配置 | 超级详细,建议收藏

news2024/11/25 11:49:13

1. 前言🔥

        我们都知道springboot默认日志是打印在控制台中的,不会以文件的形式进行保存。那么日后系统上线肯定是有需要对日志进行定位分析问题的,那么如何实现将控制台输出的日志保存起来?

        这将又会是干货满满的一期,全程无尿点不废话只抓重点教,具有非常好的学习效果,拿好小板凳准备就坐!希望学习的过程中大家认真听好好学,学习的途中有任何不清楚或疑问的地方皆可评论区留言或私信,bug菌将第一时间给予解惑,那么废话不多说,直接开整!Fighting!! 

2. 环境说明🔥

本地的开发环境:

  • 开发工具:IDEA 2021.3
  • JDK版本: JDK 1.8
  • Spring Boot版本:2.3.1 RELEASE
  • Maven版本:3.8.2

3. 什么是跨域?

        首先,请问大家个问题,什么是跨域?估计很多小伙伴都会这么回答,跨域不就是只要请求的 url 不同,就会造成跨域,没错,是这样的,可否具体点?

        所谓跨域,其实就好比这样,A端向B端发送请求,若B端的地址协议、域名、端口三者之间任意一个与A端的址协议、域名、端口中的一个不同,这两者访问就跨域了。

给大家举几个跨域的例子,辅助大家理解。

1.http://localhost:8080/ -> http://localhost:9090/ 跨域原因:端口号不同。

2.http://10.10.10.10:8080/ -> http://20.20.20.20:8080/ 跨域原因:主机ip(域名)不同。

3.http://localhost:8080/ -> https://localhost:8080/ 跨域原因:域名不同(http/https)。

4.http://www.test.com/ -> http://test.test.com/ 跨域原因:子域名不同。

4. 为什么会跨域?

        既然清楚了跨域概念,那你们知道为何会出现跨域嘛?这其实就得从浏览器层出发了。之所以会产生跨域,就是由于浏览器的同源策略,浏览器对javascript施加的一种安全限制。

        所谓同源策略,可以看成是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能都可能会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的。javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议,域名和端口。

5. 如何解决跨域?

        当我们对跨域概念有一定的基础认知之后,我们就应该要学习如何解决跨域这种问题,你知道跨域,但你如果不会处理跨域,那就很掉身份啦,因为解决跨域的方式很多很多,你只需要知道常用的几种处理方式就好了,又不是让自己都得掌握,对吧。

        所以,接下来,我给大家诺列了解决跨域的一些方法,不要求大家都能掌握,但好歹知道这种方式能处理跨域即可。具体如下:

1.改发jsonp

        利用的是 script 标签 src 属性请求 js 无跨域问题,但具有局限性,只能发送 get 请求.

2.跨域资源共享(CORS)

        CORS是一个W3C标准,全称是"跨域资源共享",它允许浏览器向跨源服务器发出XMLHttpRequest请求,从而解决了ajax只能同源使用的限制。但CORS需要浏览器和服务器都同时支持。目前,所有浏览器都支持该功能;支持各种方式请求(post,get....)。

3.nginx代理跨域

        将不同的协议、域名、端口代理到与目标url一致的处理方式。

4.nodejs中间件代理跨域

        在本地启一个nodeis服务器转接代理,前端请求本地服务器,可在自己代码中设置跨域可访问,而后端转接请求后端是没有跨域问题的(需要真实请求的地址设置可访问才可取得数据)。

5.WebSocket协议跨域

        它是一种浏览器的API,它的目标是在一个单独的持久连接上提供全双工、双向通信。(同源策略对web sockets不适用)web sockets原理:在JS创建了web socket之后,会有一个HTTP请求发送到浏览器以发起连接。取得服务器响应后,建立的连接会使用HTTP升级从HTTP协议交换为web sockt协议。 只有在支持web socket协议的服务器上才能正常工作。

6. springboot跨域配置

        接着,我们通过在springboot项目中配置cors,起到防止跨域的目的。由于springboot本身就支持cors,所以你只需要实现 addCorsMappings 接口,就可以添加规则来允许跨域访问,具体代码如下,大家请看:

/**
 * 跨域配置
 */
@Configuration
public class CorsConfig implements WebMvcConfigurer {

   /**
    * 跨域注册器
    *
    * @param registry 跨域注册器
    */
   @Override
   public void addCorsMappings(CorsRegistry registry) {
       
      // 设置允许跨域的路径
      registry.addMapping("/**")
            // 设置允许跨域请求的域名
            .allowedOrigins("*")
            // 是否允许证书 不再默认开启
            .allowCredentials(true)
            // 设置允许的方法
            .allowedMethods("*")
            // 设置允许的头
            .allowedHeaders("*")
            // 跨域允许时间
            .maxAge(3600);
   }
}

        通过上面的配置,我们可以看到,是火力全开啊,把所有的拦截都放开了,允许了所有的跨域域名等。你也可以单独设置添加,比如限制只允许www.test.com的域名访问,那你可以这么设置:

.allowedOrigins("http://www.test.com")

        再比如限定只能对 /test 下的所有接口进行跨域访问,同时只能访问 GET 和 POST 方法,那你这样设置即可。

registry.addMapping("/test/**") .allowedMethods("POST", "GET");

... ...

好啦,以上就是这期的所有内容了,咱们下期再见。

7. 热文推荐🔥

滴~如下推荐【Spring Boot 进阶篇】的学习大纲,请小伙伴们注意查收。

Spring Boot进阶(01):Spring Boot 集成 Redis,实现缓存自由

Spring Boot进阶(02):使用Validation进行参数校验

Spring Boot进阶(03):如何使用MyBatis-Plus实现字段的自动填充

Spring Boot进阶(04):如何使用MyBatis-Plus快速实现自定义sql分页

Spring Boot进阶(05):Spring Boot 整合RabbitMq,实现消息队列服务

Spring Boot进阶(06):Windows10系统搭建 RabbitMq Server 服务端

Spring Boot进阶(07):集成EasyPoi,实现Excel/Word的导入导出

Spring Boot进阶(08):集成EasyPoi,实现Excel/Word携带图片导出

Spring Boot进阶(09):集成EasyPoi,实现Excel文件多sheet导入导出

Spring Boot进阶(10):集成EasyPoi,实现Excel模板导出成PDF文件

Spring Boot进阶(11):Spring Boot 如何实现纯文本转成.csv格式文件?

Spring Boot进阶(12):Spring Boot 如何获取Excel sheet页的数量?

Spring Boot进阶(13):Spring Boot 如何获取@ApiModelProperty(value = “序列号“, name = “uuid“)中的value值name值?

Spring Boot进阶(14):Spring Boot 如何手动连接库并获取指定表结构?一文教会你

Spring Boot进阶(15):根据数据库连接信息指定分页查询表结构信息

Spring Boot进阶(16):Spring Boot 如何通过Redis实现手机号验证码功能?

Spring Boot进阶(17):Spring Boot如何在swagger2中配置header请求头等参数信息

Spring Boot进阶(18):SpringBoot如何使用@Scheduled创建定时任务?

Spring Boot进阶(19):Spring Boot 整合ElasticSearch

Spring Boot进阶(20):配置Jetty容器

Spring Boot进阶(21):配置Undertow容器

Spring Boot进阶(22):Tomcat与Undertow容器性能对比分析

Spring Boot进阶(23):实现文件上传

Spring Boot进阶(24):如何快速实现多文件上传?

Spring Boot进阶(25):文件上传的单元测试怎么写?

Spring Boot进阶(26):Mybatis 中 resultType、resultMap详解及实战教学

Spring Boot进阶(27):Spring Boot 整合 kafka(环境搭建+演示)

Spring Boot进阶(28):Jar包Linux后台启动部署及滚动日志查看,日志输出至实体文件保存

Spring Boot进阶(29):如何正确使用@PathVariable,@RequestParam、@RequestBody等注解?不会我教你,结合Postman演示

Spring Boot进阶(30):@RestController和@Controller 注解使用区别,实战演示

...

8. 文末🔥

        如果想系统性的学习Spring Boot,小伙伴们直接订阅bug菌专门为大家创建的Spring Boot专栏《滚雪球学Spring Boot》从入门到精通,从无到有,从零到一!以知识点+实例+项目的学习模式由浅入深对Spring Boot框架进行学习&使用。

       我是bug菌,一名想走👣出大山改变命运的程序猿。接下来的路还很长,都等待着我们去突破、去挑战。来吧,小伙伴们,我们一起加油!未来皆可期,fighting!

关注公众号,获取最新BAT互联网公司面试题、4000G pdf电子书籍、简历模板等硬核资源

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

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

相关文章

最新Java适配商城系统

城前端功能展示 商城移动端 后端基于SpringBoot 研发,前端使用 Vue、uniapp开发 前后端分离,支持分布式部署,支持Docker,各个API独立,并且有独立的消费者 api不需要单独部署,只需启动一个jar包就可以正…

c语言基础知识(知识点较为完整)

计算机和c语言基础知识 计算机常识 什么是计算机? 顾名思义,就是能够进行数据运算的机器(台式电脑、笔记本电脑、平板电脑、智能手机) 计算机_百度百科 计算机的发明者是谁 ? 关于电子计算机的发明者是谁这一问题,有好几种答案: 1936年英国数学家…

Lamini:大语言模型精调框架

Lamini:大语言模型精调框架 精调是大型语言模型 (LLM) 开发生命周期中最困难的部分之一。如果我们谈论的是诸如人类反馈强化学习 (RLHF) 之类的技术,那么这个过程尤其具有挑战性,因为这需要特别复杂的工作流程。 最近,我发现诞生…

11 长效保证机制:伦理道德风险外溢临界模型

AI系统上线后,随着不断的投入使用AI系统会自我学习和自我演进,这也导致了AI系统的伦理道德性并不是一次性的验证,而是需要按照一定的周期不断的验证,通过按周期巡检的方式持续的评估AI系统的伦理道德风险的外溢可能性。如何建立一…

css、js(vue)进行textarea自适应高度(超详细说明)

文章目录 需求——如下图一、纯css 的自适应高度(有问题,不推荐)1.css代码2. html代码3. 代码截图说明4. 效果和会出现的问题 二、js 的自适应高度0.思路1.代码1. css代码2. html代码3. js代码 2.代码说明3.注意点导致的问题(0&am…

spark-sql写入对象存储路径不存在问题(异常路径自动消失)

一、问题分析 1, 环境 spark3.2 hadoop3.2.2 2, 问题现象 insert overwrite table到hive表时,出现路径不存在的报错,导致任务失败。 当表的路径在hdfs上时,没有问题。 表的路径在对象存储上时会有问题。 insert overwrit…

python如何连接mysql数据库

python链接mysql数据库要用到pymysql模块中的connect ,connect函数是pymysql模块中 用于连接MySQL数据库的一个函数。 所以连接mysql之前需要先导入pymysql模块。 第一步,mysql模块下载 方法1(使用pip命令安装): 因…

测试岗位是巨坑,7年测试告诉你千万别入行.....

每次都有人问我软件测试的前景是什么样的,每年也会有人很多人纷纷涌入测试的岗位上,希望自己能够进入阿里、华为等大厂 但是测试岗位真的那么吃香吗?今天我结合从零基础小白到测试开发的成长经历,来说下这个行业的发展前景&#…

微信小程序仿网易音乐播放器项目

一、项目展示 主页: 播放页: 搜索页: 排行榜页: 小控件: 二、项目结构 三、项目功能点 后端接口,使用node写的,使用了网易云音乐API: 封装的api文件 //env是基础地址js文件 im…

05 JDBC基础

什么是持久化 将内存中的数据永久保存在磁盘中,方便以后使用 JDBC是什么 java数据库连接 用于执行sql语句的java API java官方提供接口,各大厂商提供实现类,程序员使用实现类的jar包 JDBC的开发流程 添加包: mysql-connector-java-5.1.48.jar lombok.jar 口诀:贾连欲…

Linux文件内管理命令

目录 Linux文件内管理命令 创建文件 目录 普通文件 链接文件 删除文件 删除文件 删除目录 查看文件 目录 普通文件 编辑普通文件 在命令行进行文本内容处理 查找内容 复制文件 移动文件 命令详解 mkdir 作用 语法格式 touch 作用 语法格式 选项 ​编辑…

STM32——SDIO的学习(驱动SD卡)(理论篇)

目录 一、SD卡简介 1.1历史 1.2 tf卡和SD卡的区别 1.3 mmc,emmc,nand,flash的关系 1.4 SD卡的规格等级 1.4.1按容量分 1.4.2 class等级 1.4.3 UHS总线模式 1.4.4 UHS速度等级 1.4.5 VSC视频速度等级 二、SD卡的内部结构 三、SDIO…

MapReduce【Shuffle-Combiner】

概述 Conbiner在MapReduce的Shuffle阶段起作用,它负责局部数据的聚合,我们可以看到,对于大数据量,如果没有Combiner,将会在磁盘上写入多个文件等待ReduceTask来拉取,但是如果有Combiner组件,我们…

什么是Reactive服务架构

介绍: 在java web开发领域,区别于传统的的同步服务架构(底层实现基于同步阻塞IO模型),异步服务这个“新词”(bushi)在不断被提及和重视,不少公司的研发部门也开始在尝试对自己的业务…

【JMM】并发编程Bug的源头——可见性/有序性/原子性问题

本文目录( ̄∇ ̄)/ 可见性问题 有序性问题 为什么会进行指令重排序/乱序执行? 乱序存在的条件 this对象的溢出 原子性问题 如何保证原子性? synchronized 原理简介 加锁的方式 那么问题来了,JVM是如何知道当前…

2022年中国标准创新贡献奖获奖名单公示,海尔再添两项标准创新奖

01 2022年中国标准创新贡献奖 获奖名单公示 海尔再添两项标准创新奖 近日,2022年中国标准创新贡献奖获奖名单公示。其中,海尔GB/T 28219—2018《智能家用电器通用技术要求》、T/CAS 311.1—2018《电器电子产品绿色供应链管理第1部分:通则》…

前端实现拖拽效果改变元素顺序

文章目录 前言一、实现效果二、拖拽API1.代码2.遇见问题 总结 前言 在一次工作中,前端要实现通过鼠标实现拖拽改变顺序的功能,之前没有接触过拖拽这一块所以刚开始一筹莫展,幸运的是在查阅学习中实现了前端拖拽功能。 一、实现效果 二、拖拽…

月薪从10k到30k,一个普通测试工程师的3年涨薪之路...

“要涨薪,先跳槽”各个行业都存在这一共识,但是任何行业也都没有像程序员这样更为适用且好用的了。 前不久,就有网友分享了自己作为一个普通的自动化测试工程师的三年真实涨薪经历。但看看这个三年涨薪之路,好像并不普通啊&#…

2022年深圳杯数学建模D题复杂水平井三维轨道设计解题全过程文档及程序

2022年深圳杯数学建模 D题 复杂水平井三维轨道设计 原题再现: 在油气田开采过程中,井眼轨迹直接影响着整个钻井整体效率。对于复杂水平井,较差的井眼轨迹很可能会造成卡钻或施加钻压困难等重大事故的发生。因而,在施工之前分析影…

python爬虫-获取某某在线翻译的查询结果,爬取json文件并解析

文章目录 从基础步骤下手正确获取response数据关于url获取方式关于post方法的参数关于payload参数填入运行效果解析json数据到文件中完整代码运行结果 从基础步骤下手 # 指定url # 发出请求,get或post # 获取响应 # 把目标文件转存为字符串形式 # 持久性保存正确获…