一、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实现第二届蓝桥杯连通问题(C++)

    连通问题. BMP是常见的图像存储格式. 如果用来存黑白图像(颜色深度=1),则其信息比较容易读取. 与之相关的数据: (以下偏移均是从文件头开始) 偏移:10字节, 长度4字节: 图像数据真正开始的 ...

  2. Java实现第十届蓝桥杯最大降雨量

    试题 E: 最大降雨量 本题总分:15 分 [问题描述] 由于沙之国长年干旱,法师小明准备施展自己的一个神秘法术来求雨. 这个法术需要用到他手中的 49 张法术符,上面分别写着 1 至 49 这 49 ...

  3. Nginx跨域及Https配置

    一.跨域 1. 什么是跨域? 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制(指一个域下的文档或脚本试图去请求另一个域下的资源,这 ...

  4. Hook踩坑记:React Hook react-unity-webgl

    自公司前后分离上手React以来,一个坑一个坑的踩,Class的全生命周期云里雾里,还么屡明白,就抱上了Hook的大腿不松手,确实爽到飞起.修改到Hook的过程基本比较顺畅,直接少了三分之一的代码,组 ...

  5. js实现初始化调用摄像头

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  6. 阻塞队列一——java中的阻塞队列

    目录 阻塞队列简介:介绍阻塞队列的特性与应用场景 java中的阻塞队列:介绍java中实现的供开发者使用的阻塞队列 BlockQueue中方法:介绍阻塞队列的API接口 阻塞队列的实现原理:具体的例子 ...

  7. Spting:基于注解的组件化管理

    @Component,@Controller(控制层),@Service(业务层),@Repository(持久层) 以上四个注解的功能完全相同,不过在实际开发中,要在不同功能的类上加上响应的注解 1 ...

  8. 如何解决在electron里无法使用puppeteer的evaluate函数

    报错如图,只需要注释掉 index.html 含有 http-equiv="Content-Security-Policy 的 meta 标签就可以了.

  9. AutoIt实现文件上传

    AutoIt目前最新是v3版本,这是一个使用类似BASIC脚本语言的免费软件,它设计用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动 ...

  10. beego register db `default`, sql: unknown driver "mysql" (forgotten import?)

    首先先去你的目录下找找这个文件里有没有东西,或者有没有这个文件 如果没有 执行下面两个命令: 下载:go get github.com/Go-SQL-Driver/MySQL 安装:go instal ...