一、Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等

CORS与JSONP相比

1、 JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。

2、 使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。

3、 JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS

浏览器支持情况

Chrome 3+

Firefox 3.5+

Opera 12+

Safari 4+

Internet Explorer 8+

二、在spring MVC 中可以配置全局的规则,也可以使用@CrossOrigin注解进行细粒度的配置。

全局配置:

@Configuration

public class CustomCorsConfiguration {

  @Bean

  public WebMvcConfigurer corsConfigurer() {

    return new WebMvcConfigurerAdapter() {

         @Override

         public void addCorsMappings(CorsRegistry registry) {

             registry.addMapping("/api/**").allowedOrigins("http://localhost:8080");

         }

    };

  }

}

或者是

/**

 * 全局设置

 *

 * @author wujing

 */

@Configuration

public class CustomCorsConfiguration2 extends WebMvcConfigurerAdapter {

  @Override

  public void addCorsMappings(CorsRegistry registry) {

    registry.addMapping("/api/**").allowedOrigins("http://localhost:8080");

  }

}

定义方法:

/**

 * @author wujing

 */

@RestController

@RequestMapping("/api")

public class ApiController {

  @RequestMapping(value = "/get")

  public HashMap<String, Object> get(@RequestParam String name) {

    HashMap<String, Object> map = new HashMap<String, Object>();

    map.put("title", "hello world");

    map.put("name", name);

    return map;

  }

}

测试js:

$.ajax({

                   url: "http://localhost:8081/api/get",

                type: "POST",

                data: {

                    name: "测试"

                },

                success: function(data, status, xhr) {

                   console.log(data);

                   alert(data.name);

                }

              });

细粒度配置

/**

 * @author wujing

 */

@RestController

@RequestMapping(value = "/api", method = RequestMethod.POST)

public class ApiController {

  @CrossOrigin(origins = "http://localhost:8080")

  @RequestMapping(value = "/get")

  public HashMap<String, Object> get(@RequestParam String name) {

    HashMap<String, Object> map = new HashMap<String, Object>();

    map.put("title", "hello world");

    map.put("name", name);

    return map;

  }

}

转自:http://www.roncoo.com/article/detail/125503

 
延伸阅读
 

Spring Boot Web应用开发 CORS 跨域请求支持的更多相关文章

  1. Spring Boot Web应用开发 CORS 跨域请求支持:

    Spring Boot Web应用开发 CORS 跨域请求支持: 一.Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等CORS与JSONP相比 1. JSONP只能实现 ...

  2. spring boot / cloud (六) 开启CORS跨域访问

    spring boot / cloud (六) 开启CORS跨域访问 前言 什么是CORS? Cross-origin resource sharing(跨域资源共享),是一个W3C标准,它允许你向一 ...

  3. Spring Boot 2中对于CORS跨域访问的快速支持

    原文:https://www.jianshu.com/p/840b4f83c3b5 目前的程序开发,大部分都采用前后台分离.这样一来,就都会碰到跨域资源共享CORS的问题.Spring Boot 2 ...

  4. 九、Spring Boot 优雅的实现CORS跨域

    前言 我们的springboot 架手架已经包含了mysql,redis,定时任务,邮件服务,短信服务,文件上传下载,以及docker-compose 构建镜像等等. 接下来让我们解决另一个常见的问题 ...

  5. spring boot 中 2.X 的跨域请求

    解决跨域: @Configuration @EnableAutoConfiguration public class ZooConfiguration { @Bean public FilterReg ...

  6. Web Api之Cors跨域(干货)---大家一定要看清我写的内容哦

    Web Api之Cors跨域 要想跨域需要准备一下几步骤 1.创建WebAPI(请按照图片先后顺序来) 2.进入NuGet包管理搜 Microsoft.AspNet.WebApi.Cors 进行下载 ...

  7. CORS跨域请求规则以及在Spring中的实现

    CORS: 通常情况下浏览器禁止AJAX从外部获取资源,因此就衍生了CORS这一标准体系,来实现跨域请求. CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origi ...

  8. 4 伪ajax:jsonp、cors 跨域请求

    一.同源策略 https://www.cnblogs.com/yuanchenqi/articles/7638956.html 同源策略(Same origin policy)是一种约定,它是浏览器最 ...

  9. CORS跨域请求总结

    CORS跨域请求分为简单请求和复杂请求. 1. 简单请求: 满足一下两个条件的请求. (1) 请求方法是以下三种方法之一: HEAD GET POST (2)HTTP的头信息不超出以下几种字段: Ac ...

随机推荐

  1. Java实现 蓝桥杯VIP 基础练习 回形取数

    问题描述 回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度.一开始位于矩阵左上角,方向向下. 输入格式 输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列.接下来m ...

  2. Java实现 蓝桥杯VIP 算法提高 欧拉函数

    算法提高 欧拉函数 时间限制:1.0s 内存限制:512.0MB 说明 2016.4.5 已更新试题,请重新提交自己的程序. 问题描述 给定一个大于1,不超过2000000的正整数n,输出欧拉函数,p ...

  3. java实现黄金队列

    ** 黄金队列** 黄金分割数0.618与美学有重要的关系.舞台上报幕员所站的位置大约就是舞台宽度的0.618处,墙上的画像一般也挂在房间高度的0.618处,甚至股票的波动据说也能找到0.618的影子 ...

  4. java代码(6) ---guava之multimap

    guava之multimap 上一篇说的是Multiset它可以对存入的相同元素做一个计数的功能,那multimap呢? 一.概述 1.基本介绍和案例说明 multimap和Multiset的继承结果 ...

  5. BigDecimal的setScale常用方法(ROUND_UP、ROUND_DOWN、ROUND_HALF_UP、ROUND_HALF_DOWN)

    BigDecimal的setScale四大常用方法总结 // 设置小数点后第三位数字一大一小观察效果BigDecimal num = new BigDecimal("3.3235667&qu ...

  6. javascript内置函数提供的显式绑定

    内置函数提供的显式绑定 最近在开发中遇到使用arr.map(module.fun) 这样的写法时(在一个模块调用了另外一个模块的方法), 造成了函数中this丢失的问题, 显示为undefined, ...

  7. 一个static和面试官扯了一个小时,舌战加强版

    一:背景 1. 讲故事 最近也是奇怪,在社区里看到好几篇文章聊static 的玩法以及怎么拿这个和面试官扯半个小时,有点意思,点进去看都是java版的,这就没意思了,怎么也得有一篇和面试官扯C# 中的 ...

  8. 被迫重构代码,这次我干掉了 if-else

    本文收录在个人博客:www.chengxy-nds.top,技术资源共享,一起进步 最近公司貌似融到资了!开始发了疯似的找渠道推广,现在终于明白为啥前一段大肆的招人了,原来是在下一盘大棋,对员工总的来 ...

  9. 解读Spring源码之前的准备

    请忽略以下的文章,现在回过头来才发现学习源码不用如此复杂 1.IDEA 新建一个maven项目, 2.pom 中倒入 spring5 的基本包,然后利用maven 插件down下源码 3.然后就可以开 ...

  10. 安装 zabbix

    目标在centos8下安装部署zabbix 4.4 zabbix介绍zabbix由2部分构成,zabbix server与可选组件zabbix agent.zabbix server可以通过SNMP, ...