详解Spring MVC CORS 跨域

作者:小新是也 时间:2023-11-25 08:04:37 

介绍

跨域CORS,全称是"跨域资源共享"(Cross-origin resource sharing)

当页面发出跨域请求时:

1、简单请求(先简单理解为正常的get/post吧):

浏览器将请求的地址添加到header的Origin里面发送请求。接下来就看后台如何处理了。

2、非简单请求(姑且简单理解成Content-Type:"application/json"吧):

浏览器会先发个预检请求(preflight),也就是OPTIONS请求。服务器返回是否许可访问和支持的请求方式,浏览器再决定是否发出请求。

使用@CrossOrigin注解

用法很简单,只需在controller或者方法上面添加注解即可。在controller上用表示整个controller下的方法都支持跨域


@Controller
public class HomeController {
@CrossOrigin
@RequestMapping("/")
public String Index() {
 return "Index";
}
}

参数说明

  • origins: 表示允许跨域的地址
     前面的http(s)必须加,默认*表示全部

  • value: origins的别名

  • allowedHeaders: 在OPTIONS请求中,返回的Access-Control-Allow-Headers
     这个参数限定了客户端只能发送的header参数,不在此范围内浏览器阻止发出请求。默认*

  • exposedHeaders: 对应Access-Control-Expose-Headers
     该字段可选。CORS请求时,XMLHttpRequest对象的getResponseHeader()方法只能拿到6个基本字段:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。如果想拿到其他字段,就必须在Access-Control-Expose-Headers里面指定。上面的例子指定,getResponseHeader('FooBar')可以返回FooBar字段的值。

  • methods: 允许的请求方法,像get,post这些

  • allowCredentials: 对应Access-Control-Allow-Credentials 该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。

  • maxAge: 对应Access-Control-Max-Age 用来指定预检请求的有效期(秒),在有效期内不在发送预检请求直接请求。默认1800秒,即30分钟。

使用spring配置文件

这个适合用于全局的配置,对应的字段跟CrossOrigin差不多。path表示允许跨域的路径。


<mvc:cors>
<mvc:mapping path="/**" allowed-methods="*"/>
</mvc:cors>

来源:http://www.cnblogs.com/chenchuxin/p/6602928.html

标签:Spring,MVC,CORS,跨域
0
投稿

猜你喜欢

  • Spring循环依赖代码演示及解决方案

    2022-05-17 01:56:08
  • Android自定义控件ListView下拉刷新的代码

    2023-04-07 23:51:06
  • 全面解析Android之ANR日志

    2023-12-18 23:30:21
  • Spring依赖注入(DI)两种方式的示例详解

    2021-09-14 12:00:20
  • Java file类中renameTo方法操作实例

    2021-06-13 01:21:03
  • C#字符串使用密钥进行加解密

    2023-12-27 19:10:17
  • java 集合工具类Collections及Comparable和Comparator排序详解

    2023-04-29 03:42:06
  • Android开发实现横向列表GridView横向滚动的方法【附源码下载】

    2021-07-13 17:27:26
  • java调用oracle分页存储过程示例

    2021-06-08 12:44:16
  • Flutter Android多窗口方案落地实战

    2023-01-30 04:55:07
  • Android的支付密码输入框实现浅析

    2022-08-19 13:57:43
  • 使用Springboot封装一个自适配的数据单位转换工具类

    2022-06-07 07:12:14
  • Android毕业设计记事本APP

    2023-04-22 20:55:21
  • Android远程服务编写和调用教程

    2022-06-14 18:10:45
  • mybatis-plus自动填充插入更新时间有8小时时差

    2021-07-26 07:18:40
  • Java中构造、生成XML简明教程

    2021-10-03 09:33:58
  • java 多态性详解及常见面试题

    2023-03-15 18:08:49
  • C#实现关闭子窗口而不释放子窗口对象的方法

    2022-09-11 12:41:02
  • 深入了解Java Synchronized锁升级过程

    2021-12-12 08:13:45
  • 详解Java后端优雅验证参数合法性

    2021-09-06 16:07:22
  • asp之家 软件编程 m.aspxhome.com