springboot 添加允许跨域_SpringBoot添加支持CORS跨域访问

CORS(Cross-Origin Resource Sharing)"跨域资源共享",是一个W3C标准,它允许浏览器向跨域服务器发送Ajax请求,打破了Ajax只能访问本站内的资源限制,CORS在很多地方都有被使用,微信支付的JS支付就是通过JS向微信服务器发送跨域请求。开放Ajax访问可被跨域访问的服务器大大减少了后台开发的工作,前后台工作也可以得到很好的明确以及分工,下面我们就看讲一下如何让你的SpringBoot项目支持CORS跨域。

本章目标

基于SpringBooot项目搭建可以站外Ajax请求访问的跨域资源服务器。

构建项目

使用IDEA开发工具创建一个SpringBoot项目,预先添加Web依赖即可,项目结构如下图1所示:

9f28977e2b3e6010fe24a7fdd7b381cc.png

图1

CORSConfiguration

我们只需要添加项目Web依赖就可以了,下面我们开始添加CORS的配置信息,我们创建一个CORSConfiguration配置类,如下图2所示:

c46b453fb36ff7af6f9f277962bbc452.png

图2

上图2内我们的CORSConfiguration配置类继承了WebMvcConfiugrationAdaper父类并且重写了addCorsMappings方法,我们来简单介绍下我们的配置信息

addMapping:配置可以被跨域的路径,可以任意配置,可以具体到直接请求路径。

allowedMethods:允许所有的请求方法访问该跨域资源服务器,如:POST、GET、PUT、DELETE等。

allowedOrigins:允许所有的请求域名访问我们的跨域资源,可以固定单条或者多条内容,如:"http://www.baidu.com",只有百度可以访问我们的跨域资源。

allowedHeaders:允许所有的请求header访问,可以自定义设置任意请求头信息,如:"X-YAUTH-TOKEN"

编写跨域资源请求

我们的跨域配置到目前来说已经配置完成了,SpringBoot已经为我们内置相关配置,我们只需要重写方法修改部分参数即可,下面我们来创建一个测试跨域资源的控制器,如下图3所示:

4e8645e2581ec2fa4493f85b93485a24.png

图3

在图3内的IndexController控制器内,我们仅仅添加了一个测试返回文本的内容,当然这个控制器可以处理任意业务逻辑。

测试跨域请求

我们在项目外创建一个index.html页面(上传码云后会在resources目录找到),页面内添加部分jquery代码,如下图4所示:

22c3cb45e37e230a34e2612121404959.png

图4

我们引用了在线的jquery代码,并且在页面加载的时候为id=cors的输入按钮绑定点击事件,点击按钮时就会请求我们的/cors跨域资源路径,下面我们来运行项目测试下跨域请求,项目运行日志如下图5所示:

82555576505602654595cbdbc5df39db.png

图5

可以看到上图5内项目启动时SpringBoot内置的SpringMVC已经把我们的/cors添加到映射集合,我们打开之前编写的index.html网页,界面效果如下图6所示:

9456cf0c83f5b8a480290c4d12dce17b.png

图6

接下来我们点击“CORS跨域测试”按钮,查看下效果,如下图7所示:

26387d68cc0bafb8f535749a06b010eb.png

图7

上图7内可以看到,界面给我返回了我们/cors路径返回的文本内容,证明我们的ajax请求完美的通过跨域资源库访问了开放跨域的资源路径。

下面我们来把我们的跨域配置注释掉,重启项目后刷新index.html再次点击“CORS跨域测试”按钮,界面输出效果如下图8所示:

710bd7a91f030a79ab90336871698d22.png

图8

可以看到我们点击后并没有获取到返回内容,而是给我们提示了异常,告诉我们无法加载资源。

本章总结

本章简单讲解了SpringBoot项目对CORS请求的处理,完全自定义处理请求路径,可对请求头信息以及请求的域名进行控制。

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

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

相关文章

前端学习(359):svn服务器配置金和客户端安装

右键---新建仓库 下一步 写入仓库名称 下一步 下一步 点击finish 创建完成 选择user 单击右键 创建账号密码 创建完成 下载客户端 点击next 点击next 一直next安装 安装完成发现小乌龟(需要重启电脑)

neo4j与mysql数据库_Neo4j: 迁移MySQL的数据到Neo4j

目的: 用于社交关系的管理和维护. 社交关系是一种网状的关系图, RDBMS难于维护这样的数据.安装和配置需要满足下面几个条件安装 neo4j-apoc-procedures插件安装 APOC插件设置一下环境变量NEO4J_INSTALL_PATH/path/to/neo4j安装插件和JDBC驱动把mysql-connector-java-8.0.11.jar…

ASP.NET中TextBox控件的AutoCompleteType属性(不保存历史输入记录)

ASP.NET AutoCompleteType 属性 返回 ASP.NET TextBox 控件参考手册 定义和用法 AutoCompleteType 属性用于设置或返回 TextBox 控件的 AutoComplete 种类。 为了协助用户的数据输入,Microsoft Internet Explorer 5 及更高版本和 Netscape 都支持名为自动完成的功能…

前端学习(360):svn操作前期连接工作

把地址发送给所有人 checkout 单击ok 得到账号密码

MySQL赋权navicat_mysql 的root 用户无法授权及解决navicat 远程授权提示1044问题

先看解决方案#------------mysql root 用户无法赋权问题解决 --------1,登录 mysql -u root -p2,use mysql; 选择mysql数据库3,执行以下操作(查询用户的赋权权限,更改赋权权限 ,刷新生效)mysql> select user,host,g…

Linux文件系统中的链接

inode在讨论Linux系统的链接之前,不得不先说下inode。Linux文件系统中的每一个对象都有唯一的inode索引,每一个inode号和文件系统的一个对象一一对应,要查看文件或目录的inode号可在ls命令中使用-i选项,每个目录下的.(…

前端学习(361):svn操作后续

work下面新建文件夹 commit上传 上传 组员update 出现文件夹 新建文件夹 右键上传 点击小乌龟show-log 记录问题 版本操作 再次输入 bbb 先更新 更新之后再次上传 添加了bbb 单击右键 回滚

mysql 组复制 不一致_使用MySQL组复制的限制和局限性

本节列出和解释了组复制相关的要求和限制。1.组复制的要求要使用组复制,每个MySQL节点必须满足以下条件:1.1 基本要求InnoDB存储引擎:数据必须存储在事务型的InnoDB存储引擎中。事务以乐观形式执行,然后在提交前会检测冲突问题。如…

摘记

◇马云说:今天很残酷,明天更残酷,后天很美好,但是大多数人死在明天晚上,看不到后天的太阳!!! ◇晚上想想千条路,早上醒来走原路!!! ◇人要成功一定…

mysql 慢sql分析_如何分析Mysql慢SQL

内容摘要:开启慢查询日志捕获慢SQL使用explain分析慢SQL使用show profile查询SQL执行细节常见的SQL语句优化一、开启慢查询日志捕获慢SQL① 查询mysql是否开启慢日志捕获:SHOW VARIABLES LIKE %slow_query_log%;如果还没开启的话,开启&#x…

x264编码参数大测试:03 subme与crf(c)

一、测试内容 测试方法—— x264编码参数大测试:索引贴 http://www.cnblogs.com/zyl910/archive/2011/12/14/x264_encode_param.html 测试参数—— subme:9、10、11。设定子像素(subpixel)运动估计(motion estimation&…

mysql host %s_python mysql:虽然%s和列匹配,但并非SQL语句中使用的所有参数

PythonMySQL.connector一直给我错误不是SQL语句中使用的所有参数。这是我的代码:import mysql.connectorcon mysql.connector.Connect(userroot, passwordpassword, databaseDB, hostlocalhost)cur con.cursor()#data inserteradd_data "INSERT INTO DB.ver…

如何处理Global symbol * requires explicit package name编译错误,以及use strict用法

编写下面的简单示例来说明如何处理如下类型的错误提示: Global symbol "$c" requires explicit package name at *.pl line 8. Execution of *.pl aborted due to compilation errors. #############Code Starts############### #!/usr/bin/perl -w use s…

mysql error 1201_ERROR 1201 (HY000): Could not initialize master info structure; .....

配置mysql主从复制,start slave是报错:ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log原因:之前做过主从复制解决办法:mysql> stop slave;Query …

如何将函数的实际参数转换成数组

转自:http://www.planabc.net/2010/01/06/arguments_to_array/ 实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义…

mysql 执行查询_MySQL查询的执行过程

我们总是希望MySQL能够获得更高的查询性能,最好的办法是弄清楚MySQL是如何优化和执行查询的。一旦理解了这一点,就会发现:很多的查询优化工作实际上就是遵循一些原则让MySQL的优化器能够按照预想的合理方式运行而已。当向MySQL发送一个请求的…

膨胀

转载于:https://www.cnblogs.com/carekee/articles/2296335.html

超酷的爬虫可视化界面

大家好,本文主要介绍使用tkinter获取本地文件夹、设置文本、创建按钮下拉框和对界面进行布局。 1.导入tkinter库 导入tkinter的库,可以使用ttkbootstrap美化生成的界面 ttkbootstrap官网地址:https://ttkbootstrap.readthedocs.io/en/late…

mysql5.6定时备份_Mysql自动备份

新建一个bat文件,比如db_back.bat,写入一下内容echo offset "Ymd%date:~,4%%date:~5,2%%date:~8,2%""C:/Program Files/MySQL/MySQL Server 5.6/bin/mysqldump.exe" --opt -u fate --password145829 logging > D:\db_backup\logging_%Ymd%.s…

项目管理沙龙第十次聚会纪要-AOM项目的敏捷实践

项目管理沙龙第十次聚会纪要会议一开始,就有人跟我们分享了一个名词,“分析瘫痪”,意思是不断地追求完美,结果始终在设计状态,无法到下一步去。详细可参考这个 http://hi.baidu.com/parad1se/blog/item/8724472a71b87e…