【Spring MVC】Spring MVC如何处理跨域请求(CORS)

文章目录

  • 1. Spring MVC如何处理跨域请求呢
  • 2. Spring MVC处理CORS的几个组件
    • 2.1. CorsFilter
    • 2.2. @CrossOrigin

前言:请了解什么是CORS(跨域)

参考:https://gitee.com/firefish985/article-list/tree/master/Spring/Spring Web MVC/CORS/Spring MVC中的跨域概念名词解释.md

1. Spring MVC如何处理跨域请求呢

如果用一句话总结,其实非常简单:拦截请求根据跨域CORS的配置情况拒绝请求、设置一些响应头、允许请求

  • 拒绝请求
  • 给response添加一些CORS相关的响应头
  • 允许请求

主要目的就是添加一些CORS相关的响应头。

2. Spring MVC处理CORS的几个组件

2.1. CorsFilter

  • 作用

作用在CorsFilter类的注释上已经解释的很好了。

1、处理CORS preflight requests

2、拦截intercepts CORS simple and actual requests,并交给CorsProcesso(默认实现是DefaultCorsProcesso),处理的目的是根据CorsConfigurationSource添加相关的响应头

  • CorsFilter的结构
public class CorsFilter extends OncePerRequestFilter {private final CorsConfigurationSource configSource;private CorsProcessor processor = new DefaultCorsProcessor();
}

从CorsFilter的结构也能看出,它只包含了2个成员变量。configSource表示跨域配置,processor表示如何处理跨域。

  • CorsFilter的详细原理

如果读者要研究详细的原理,请参考Spring源码的测试类org.springframework.web.filter.CorsFilterTests,作者在我的Spring 5源码研究项目https://gitee.com/firefish985/spring-framework-deepanalysis中有非常详细的介绍和说明,请参考。

2.2. @CrossOrigin

  • 作用

用于特定的handler classes或特定的handler methods处理跨域请求。关键词:特定的,局部的,不是全局的

  • CrossOrigin的使用
@CORSsOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {@CORSsOrigin("http://domain2.com")@GetMapping("/{id}")public Account retrieve(@PathVariable Long id) {// ...}
}
  • CrossOrigin的原理

如果读者要研究详细的原理,请参考Spring源码的测试类org.springframework.web.servlet.mvc.method.annotation.CrossOriginTests,作者在我的Spring 5源码研究项目https://gitee.com/firefish985/spring-framework-deepanalysis中有非常详细的介绍和说明,请参考

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

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

相关文章

Java开发需要的网络基础知识,搞清楚计算机网络底层原理

作者:逍遥Sean 简介:一个主修Java的Web网站\游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! 前言 计算机基础是…

手机基带芯片往事

手机基带芯片往事 手机基带芯片往事-虎嗅网 5G手机芯片简史-虎嗅网

Oracle拉链表

目录 -- 准备一个拉链表 -- 2.将所有的数据 同步到拉链表中 TEST_TARGET中 --3. 源表的数据发生了变化 --4. 将新增和修改的数据同步到拉链表 -- 开链的过程 -- 判断源表和目标表的数据,不同数据插入 --5. 修改拉链表中失效的时间和状态(将原本的开链时间,改为当前时间)-- …

怎样提高外贸业务销售能力

怎样提高外贸业务销售能力 一、市场分析与研究1. 了解目标市场:2. 收集客户信息: 二、产品知识和差异化竞争1. 熟悉产品:2. 差异化竞争: 三、制定销售策略和计划1. 制定销售计划:2. 销售策略: 四、谈判技巧…

【插件】页面引导库driver.js:

文章目录 一、效果图:二、实现思路:三、实现代码:【1】Driver.js 的技术特性【2】安装依赖【3】代码实现【4】 配置相关参数 一、效果图: 二、实现思路: 【官网】https://driverjs.com/docs/installation 【npm】https://www.npmjs.com/package/driver.js 【案例】改造driver.j…

HAProxy Data Plane API 实现对 haproxy 的配置管理

文章目录 前言一、安装1. 下载HAProxy Data Plane API2. 创建 Data Plane API 配置文件 /etc/haproxy/dataplaneapi.hcl3. 修改haproxy的配置文件 二、简单使用1. 查询请求2. 提交修改请求 总结 前言 我们平时对 haproxy 配置的修改,往往是 SSH 连接进去节点&#…

C++之std::function类模板定义函数对象应用总结(二百三十八)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

C#流Stream与IO详解(4)——如何更快的读写文件

【前言】 在我们追求更快读写速度时,通常都是为了读写二进制文件,而不是文本文件,所以这里只说FileStream、BinaryReader、BinaryWriter的使用。 从前文的源码解读中能看到使用BinaryReader和BinaryWriter进行IO读写时本质还是调用了FileSt…

如何使用canvas实现一个下雪的动效

下面是一个使用Canvas实现下雪动效的代码示例&#xff1a; <!DOCTYPE html> <html> <head><title>下雪特效</title><style>body {margin: 0;padding: 0;}canvas {display: block;background: black;}</style> </head> <bo…

.NET的键盘Hook管理类,用于禁用键盘输入和切换

一、MyHook帮助类 此类需要编写指定屏蔽的按键&#xff0c;灵活性差。 using System; using System.Runtime.InteropServices; using System.Diagnostics; using System.Windows.Forms; using Microsoft.Win32;namespace MyHookClass {/// <summary>/// 类一/// </su…

一文详解JDK8常用10个更新特性

今日一语&#xff1a;当你发现编程的规律就是世界的规律时&#xff0c;你就是一名真正的程序员 1 Lambda(蓝布达)表达式 编译后会产生一个$XXXImpl1的编译文件&#xff0c;与匿名内部类相似&#xff0c;但不等同于匿名内部类。 其原理是将方法作为参数进行传递&#xff0c; JV…

【深入浅出设计模式--命令模式】

深入浅出设计模式--命令模式 一、背景二、问题三、解决方案四、试用场景总结五、后记 一、背景 命令模式是一种行为设计模式&#xff0c;它可以将用户的命令请求转化为一个包含有相关参数信息的对象&#xff0c;命令的发送者不需要知道接收者是如何处理这条命令&#xff0c;多个…

php文件上传功能(文件上传)

实现文件上传是Web开发中常用的功能之一&#xff0c;而PHP也是支持文件上传的。那么&#xff0c;下面我们就来介绍一下常用的PHP实现文件上传的方法。 使用HTML表单实现文件上传 HTML表单是Web开发中最基本的元素之一&#xff0c;它可以接收用户输入的数据&#xff0c;并通过…

Python 笔记03(多线程)

一 打开命令行&#xff0c;查看本机IP windows r 命令行输入&#xff1a;cmd ipconfig 然后查看IPv4的地址&#xff1a;192.168.1*6.1 ipconfig 二 函数式多进程 from multiprocessing import Process import os, timedef func(name):print(进程的ID&#xff1a;, os.g…

大数据时代,数据治理

一、大数据时代还需要数据治理吗&#xff1f; 数据平台发展过程中随处可见的数据问题 大数据不是凭空而来&#xff0c;1981年第一个数据仓库诞生&#xff0c;到现在已经有了近40年的历史&#xff0c;相对数据仓库来说我还是个年轻人。而国内企业数据平台的建设大概从90年代末…

Docker 自动化部署(保姆级教程)

Docker 自动化部署 1. jenkins 介绍1.1 参考链接&#xff1a;1.2 jenkins 概述1.3 jenkins部署项目的流程 2. jenkins 安装2.1 基于docker 镜像2.2 启动 jenkins 后端服务2.3 登录 jenkins 服务后端 3. jenkins自动化部署开始3.1 下载需要的插件3.2 创建任务3.2.1 描述3.2.2 配…

使用bash脚本编译Qt工程

最近在搭建Qt工程的编译服务器&#xff0c;需要通过shell脚本执行工程的编译过程&#xff0c;写在这里&#xff0c;总结最近的工作。 1. 构建过程 以Windows为例&#xff0c;在QtCreator中左侧选择“项目”便可以看到编译的指令和参数&#xff0c;这些操作也会在我们点击“构建…

git管理常用命令

1、下载代码 git clone 地址2、软件代码提交 1、查看工程中被修改的文件&#xff1a;git status 2.将不需要提交的文件回退&#xff1a;git check <文件路径> 3.更新工程到最新&#xff1a;git pull 4.将本地代码添加到暂存区&#xff1a;git add <将要提交的文件路…

CAN总线数据链路层

CAN报文帧种类: 数据帧:用于发送节点向接收节点传送数据,是使用最多的帧类型远程帧:用于接收节点向某个发送节点请求数据错误帧:用于当某节点检测出错误时向其他节点通知错误的帧过载帧:用于接收节点向发送节点通知自身接收能力的帧帧间隔:将数据帧或远程帧与前面的帧分…

MySQL学习笔记14

MySQL查询之多表查询&#xff1a;&#xff08;了解&#xff09;但是还是要掌握比较好。 1、什么是多表查询&#xff1f; 查询五子句是单表查询&#xff0c;实际工作中&#xff0c;也可能会接触到一个复杂的多表查询。 2、Union 联合查询&#xff1a; union联合查询的作用&…