Spring的跨域解决方案总结

2023-11-19

前言

跨域是什么?浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口和协议,只要有一个不同就是跨域 。我们的项目通常是采用前后端分离开发的,也就是前后端分离部署的,所以必然会存在跨域问题。

CORS(Cross-Origin Resource Sharing, 跨源资源共享)是W3C出的一个标准,其思想是使用自定义的HTTP头部让浏览器与服务器进行沟通,从而决定请求或响应是应该成功,还是应该失败。Spring框架提供给我们多种方式解决跨域问题,下面列举比较常用的通过实现CORS解决跨域的两种解决方案:

@CrossOrigin注解

通过在Controller类上添加注解 @CrossOrigin,表示Controller上的所以方法允许跨域,在Controller的方法上添加注解 @CrossOrigin,表示该方法允许跨域。以下是对CrossOrigin注解类的说明:

@Target({ ElementType.METHOD, ElementType.TYPE })

@Retention(RetentionPolicy.RUNTIME)

@Documented

public @interface CrossOrigin {

String[] DEFAULT_ORIGINS = { "*" };

String[] DEFAULT_ALLOWED_HEADERS = { "*" };

boolean DEFAULT_ALLOW_CREDENTIALS = true;

long DEFAULT_MAX_AGE = 1800;

/**

* 同origins属性一样

*/

@AliasFor("origins")

String[] value() default {};

/**

* 所有支持域的集合。

* "*"代表所有域的请求都支持

* 默认所有请求的域都支持

*/

@AliasFor("value")

String[] origins() default {};

/**

* 允许请求头中跨域的header,默认不设置的话都支持

*/

String[] allowedHeaders() default {};

/**

* 允许响应头跨域的header,默认为空

*/

String[] exposedHeaders() default {};

/**

* 跨域请求支持的方法,例如"{RequestMethod.GET, RequestMethod.POST}"}。

* 默认支持RequestMapping中设置的方法

*/

RequestMethod[] methods() default {};

/**

* 是否允许cookie随请求发送,使用时必须指定具体的域

*/

String allowCredentials() default "";

/**

* 预请求的结果的有效期,默认是30分钟

*/

long maxAge() default -1;

}

配置全局CorsFilter

通过配置全局的CorsFilter,统一处理跨域问题。

@Configuration

public class GlobalCorsConfig {

@Bean

public CorsFilter corsFilter() {

//1.添加CORS配置信息

CorsConfiguration config = new CorsConfiguration();

//1) 允许的域,不要写*,否则cookie就无法使用了

config.addAllowedOrigin("域名1");

config.addAllowedOrigin("域名2");

//2) 是否发送Cookie信息

config.setAllowCredentials(true);

//3) 允许的请求方式

config.addAllowedMethod("OPTIONS");

config.addAllowedMethod("HEAD");

config.addAllowedMethod("GET");

config.addAllowedMethod("PUT");

config.addAllowedMethod("POST");

config.addAllowedMethod("DELETE");

config.addAllowedMethod("PATCH");

// 4)允许的头信息

config.addAllowedHeader("*");

// 5) 有效时长

config.setMaxAge(3600L);

//2.添加映射路径,我们拦截一切请求

UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();

configSource.registerCorsConfiguration("/**", config);

//3.返回新的CorsFilter.

return new CorsFilter(configSource);

}

}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring的跨域解决方案总结 的相关文章

  • JPanel透明背景和显示元素[重复]

    这个问题在这里已经有答案了 我插入一个背景图e 变成 aJPanel但一些界面元素消失了 以下 Java Swing 元素不会出现 标签标题 标签 usuario 标签 密码 按钮加速器 你能否使图像透明或元素不透明 setOpaque f
  • 在气球内显示带有照片的多个地标的最佳做法是什么?

    我有一个项目如下 从手机上拍摄几张照片 将照片保存在网络系统中 然后将照片显示在其中的谷歌地球上 我读过很多文章 但它们都使用 fetchKml 我读过的一篇好文章是使用 php 但使用 fetchKml 我不知道是否可以使用 parseK
  • 如何在具有动态列的表中插入值 Jdbc/Mysql

    我想在具有动态列的表中添加值 我设法创建一个包含动态列的表 但我不知道如何插入数据 Create Table sql CREATE TABLE MyDB myTable level INTEGER 255 int columnNumber
  • 无法从后台服务通过 WiFi 访问互联网

    我将直接介绍我发现的一些事实 数据 如果您遇到 解决了类似的问题 请帮助我 我每 5 分钟向服务器发送一次数据 除非用户在服务器的帮助下手动将其关闭 wakeful broadcast receiver通过一个intent service
  • Maven 多模块项目结构问题

    自从过去几周构建我的 Maven 多模块项目以来 这是我的一次有趣的经历 当我决定使用 Maven 进行构建生命周期管理时 我有几个原因希望选择 Maven A 大多数开发团队都是分开的 这样每个团队都可以在项目中的单独模块上工作 例如团队
  • Java 的 QP 求解器 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • LibGdx 如何使用 OrthographicCamera 滚动?

    我已经找了 10 个小时 字面意思 我已经完成了 我需要问一下 事情是我正在学习如何使用 LibGdx 来编写 Java 游戏 我正在做一个水平太空飞船游戏 所以 我最糟糕的问题是我不知道如何滚动 我认为绘制会更好地解释 我想绘制一个巨大的
  • 如何自定义JProgressBar?

    我正在制作一个启动器 我想要一个自定义的进度栏 我已经做了一些研究 并且可以使用 JavaFX 从未用它做过任何事情 并且可以通过替换 UI 来实现 我正在寻找一个具有圆形边缘和圆形填充的酒吧 像这样的事情 package gui impo
  • 如何使用 Java 原生接口从 Java 调用 Go 函数?

    可以通过以下方式调用 C 方法JNA https en wikipedia org wiki Java Native AccessJava 中的接口 如何使用 Go 实现相同的功能 package main import fmt impor
  • grails 上的同步块在 Windows 上有效,但在 Linux 上无效

    我有一个 grails 应用程序 它依赖于服务中的同步块 当我在 Windows 上运行它时 同步按预期工作 但当我在 ams linux 上运行时 会出现 StaleObjectStateException 该问题在以下示例中重现 cla
  • 源服务器未找到目标资源的当前表示或不愿意透露该表示存在

    web xml
  • 如何在将数据发送到 Firebase 数据库之前对其进行加密?

    我正在使用 Firebase 实时数据库制作聊天应用程序 我知道 Firebase 非常安全 只要您的规则正确 但我自己可以阅读使用我的应用程序的人的所有聊天记录 我想阻止这种情况 为此我需要一种解密和加密方法 我尝试使用凯撒解密 但失败了
  • 使用外部硬盘写入和存储 mysql 数据库

    我已经设置了 mysql 数据库在我的 Mac 上使用 java 和 eclipse 运行 它运行得很好 但现在我将生成大约 43 亿行数据 这将占用大约 64GB 的数据 我存储了大量的密钥和加密值 我有一个 1TB 外部我想用作存储位置
  • 通用 JSF 实体转换器[重复]

    这个问题在这里已经有答案了 我正在编写我的第一个 Java EE 6 Web 应用程序作为学习练习 我没有使用框架 只是使用 JPA 2 0 EJB 3 1 和 JSF 2 0 我有一个自定义转换器 用于将存储在 SelectOne 组件中
  • 嵌入式 tomcat 7 servlet 3.0 注释不起作用

    我有一个精简的测试项目 其中包含 Servlet 版本 3 0 用注释声明 如下所示 WebServlet test public class TestServlet extends HttpServlet private static f
  • RMI 服务器:rmiregistry 或 LocateRegistry.createRegistry

    对于服务器端的RMI 我们需要启动吗rmiregistry程序 或者只是调用LocateRegistry createRegistry 如果两者都可以的话 各有什么优点和缺点 他们是同一件事 rmiregistry是一个单独的程序 您可以从
  • 使用 Maven 3 时 Cobertura 代码覆盖率为 0%

    读完这篇文章后 将 Cobertura 与 Maven 3 0 2 一起使用的正确方法是什么 https stackoverflow com questions 6931360 what is the proper way to use c
  • JDK 7 的快速调试/调试构建

    我正在寻找 JDK 的调试 或者我猜他们称之为快速调试构建 以启用在运行时生成的打印程序集以及查找性能问题时所需的其他诊断 就目前情况而言 我似乎找不到可以直接使用的 现成的 快速调试构建二进制包 有人可以帮我提供下载链接 或者至少提供有关
  • Java泛型类型

    当我有一个界面时 public interface Foo
  • 日期时间解析异常

    解析日期时 我的代码中不断出现异常错误 日期看起来像这样 Wed May 21 00 00 00 EDT 2008 这是尝试读取它的代码 DateTimeFormatter formatter DateTimeFormatter ofPat

随机推荐

  • sqli-labs Less-8

    Less 8 Get Blind Boolian Based Single Quotes 1 原页面 2 id 1 3 id 1 4 尝试布尔盲注 代码存在sql注入漏洞 然而页面既不会回显数据 也不会回显错误信息 我们可以通过构造语句 来
  • Qt入门学习之常用界面设计组件(五)

    1 QComboBox QPlainTextEdit简介 QComboBox是下拉列表框组件类 它提供了一个下拉表供用户选择 也可以直接当作一个QLineEdit用作输入 QComboBox除了显示可见下拉列表外 每一个项 item 或称列
  • python爬虫与数据可视化报告_Python爬虫以及数据可视化分析!

    原标题 Python爬虫以及数据可视化分析 简单几步 通过Python对B站番剧排行数据进行爬取 并进行可视化分析 源码文件可以参考Github上传的项目 https github com Lemon Sheep Py tree maste
  • 六、SpringBoot——SpringMVC自动配置&扩展配置(web定制)

    1 SpringMVC自动配置 org springframework boot autoconfigure web web的所有web自动场景 以SpringMVC为例 Spring Boot 自动配置好了SpringMVC 以下是Spr
  • vue jest单元测试

    一 渲染 mount 和 shallowMount 1 1 mount 和 shallowMount vue test utils 提供了两种方式用于渲染 或者说 加载 mount 一个组件 mount 和 shallowMount 一个组
  • SQLite存取二进制数据

    程序功能 使用SQLite的C API操作SQLite数据库 存取二进制数据 用来测试的文件都小于65535字节 没有测试更大的文件 参考文档 http www cntxk com CataNews 56 info8106 html 编译环
  • C语言操作符的那些事(详细全)

    前言 C语言中操作符不多 但是有些相同的操作符都是在不同的表达式中 有不同的解释意思 比如 号 在表达式中5 5表示乘号 在int p表示指针 在 p 10中 又表示解引用 所以今天就来详细的整理一下C语言中的操作符 做到心中有数 可以一眼
  • 惊天大神坑 关于 python-socketio 与 socket.io-client 版本兼容问题

    在使用fastapi进行开发中 使用python socketio作为socketi库 前端项目使用vue开发 配合socket io client作为client端 我的python socketio版本号为4 6 0 前端socket
  • Java代码常用功能实现总结

    目录 1 获取当前系统时间 2 获取当前时间戳 3 获取主机名和IP 4 new String用法 5 ByteBuffer和String的互相转换 6 int和string相互转换 7 把多个json放到list中 8 List集合去除重
  • MarkdownPad2 下一些设置

    MarkdownPad2注册码 邮箱 Soar360 live com 授权秘钥 GBPduHjWfJU1mZqcPM3BikjYKF6xKhlKIys3i1MU2eJHqWGImDHzWdD6xhMNLGVpbP2 M5SN6bnxn2k
  • hive之生成唯一id

    1 针对没有变话的一张表生成id 表中数据固定不会增加修改 ROW NUMBER over 针对所有数据生成自增id 即使所有数据都相同 2 针对没有变化的表 根据字段生成自增id 注意cc11 和cc12我故意没按顺序摆放 这样做的好处是
  • tkinter+socket实现基本的实时收发消息

    tkinter sockte实现基本的实时收发 tkinter tkinter是比较简单的GUI界面设计块 有许多控件基本能实现很多简单的功能 比如很多应用软件安装时的GUI都可以实现 在这个的功能里只用到模块的按钮 Button 输入框
  • 当我们谈人工智能 我们在谈论什么

    我们对一个事物的认识模糊往往是因为宣传过剩冲淡了理论的真实 我们陷在狂欢里 暂时忘记为什么要狂欢 如何踏上这趟飞速发展的列车成为越来越多人心心念念的事情 人工智能的浪潮更像是新闻舆论炒起来的话题 城外的人想进去 城内的人也不想出来 当我们谈
  • Apache RocketMQ 远程代码执行漏洞(CVE-2023-33246)

    漏洞简介 RocketMQ 5 1 0及以下版本 在一定条件下 存在远程命令执行风险 RocketMQ的NameServer Broker Controller等多个组件外网泄露 缺乏权限验证 攻击者可以利用该漏洞利用更新配置功能以Rock
  • Typora常用快捷键

    Typora常用快捷键大全 ctrl 1到6 1 6级标题 标题用ctrl H是没用的 ctrl shift k 随时随地插入代码块 极为方便 ctrl t 创建表格 也可直接输入 列1 列2 列3 并回车来创建表 ctrl shift q
  • 01 【Vue简介 初识Vue 模板语法和数据绑定】

    1 Vue简介 1 1官网 英文官网 中文官网 1 2介绍与描述 Vue 是一套用来动态构建用户界面的渐进式JavaScript框架 构建用户界面 把数据通过某种办法变成用户界面 渐进式 Vue可以自底向上逐层的应用 简单应用只需要一个轻量
  • 差分隐私简介

    要点 差分隐私可以通过向聚合查询结果添加随机化 噪声 来实现 以保护个人的条目 而不会显著改变查询结果 t t 差分隐私算法保证攻击者能获取的个人数据几乎和他们从没有这个人记录的数据集中能获取的相差无几 t t 最简单的算法之一是拉普拉斯机
  • 优化VMware提高虚拟机运行速度的技巧

    vmware虚拟机如何设置不当的话会造成运行速度慢 并影响主机运行 甚至会出现死机 一下是提高vmware虚拟机运行速度的几个技巧 希望我的博客对您有用 阿里云最高1888通用代金券 送给你 文章来自 http blog csdn net
  • K8s 架构简介(一)

    一 前言 在开始学习K8s之前 让我们对容器有一个基本的了解 1 1 什么是容器 一个容器镜像是一个可运行的软件包 其中包含了一个完整的可执行程序 包括代码和运行时需要应用 系统库和全部重要设置的默认值 通过将应用程序本身 和其依赖容器化
  • Spring的跨域解决方案总结

    前言 跨域是什么 浏览器从一个域名的网页去请求另一个域名的资源时 域名 端口和协议 只要有一个不同就是跨域 我们的项目通常是采用前后端分离开发的 也就是前后端分离部署的 所以必然会存在跨域问题 CORS Cross Origin Resou