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

 更新时间:2017年05月27日 08:49:11   作者:jerome_s  
本篇文章主要介绍了Spring Boot Web应用开发 CORS 跨域请求支持,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

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

CORS与JSONP相比

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

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

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

浏览器支持情况

  1. Chrome 3+
  2. Firefox 3.5+
  3. Opera 12+
  4. Safari 4+
  5. 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;
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 详解Java中跳跃表的原理和实现

    详解Java中跳跃表的原理和实现

    跳跃表(Skip list)是有序链表的扩展,简称跳表,它在原有的有序链表上增加了多级索引,通过索引来实现快速查找,实质上是一种可以进行二分查找的有序链表。本文主要为大家介绍了跳跃表的原理和实现,需要的可以参考一下
    2022-12-12
  • Java数据结构之双向链表的实现

    Java数据结构之双向链表的实现

    相较单链表,双向链表除了data与next域,还多了一个pre域用于表示每个节点的前一个元素。这样做给双向链表带来了很多优势。本文主要介绍了双向链表的实现,需要的可以参考一下
    2022-10-10
  • Java虚拟机底层原理详细分析

    Java虚拟机底层原理详细分析

    这篇文章主要介绍了Java虚拟机底层原理详细分析,运行时数据区就是俗称的虚拟机内存,主要包括我们熟悉的堆、栈、本地方法栈、方法区(元空间)、程序计数器,虚拟机调优主要针对的是运行时数据区,也就是虚拟机内存,需要的朋友可以参考下
    2024-01-01
  • JavaWeb中的路径问题解读

    JavaWeb中的路径问题解读

    这篇文章主要介绍了JavaWeb中的路径问题解读,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 详解spring mvc4使用及json 日期转换解决方案

    详解spring mvc4使用及json 日期转换解决方案

    本篇文章主要介绍了spring mvc4使用及json 日期转换解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • SpringBoot集成Nacos的项目实践

    SpringBoot集成Nacos的项目实践

    本文主要介绍了SpringBoot集成Nacos的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • Java基于正则表达式实现xml文件的解析功能详解

    Java基于正则表达式实现xml文件的解析功能详解

    这篇文章主要介绍了Java基于正则表达式实现xml文件的解析功能,结合实例形式分析了java使用正则表达式针对xml文件节点的相关操作技巧,需要的朋友可以参考下
    2017-08-08
  • SpringBoot集成 JWT实现用户登录认证的项目实践

    SpringBoot集成 JWT实现用户登录认证的项目实践

    当今前后端分离时代,基于Token的会话保持机制比传统的Session/Cookie机制更加方便,本文主要介绍了SpringBoot集成 JWT实现用户登录认证的项目实践,感兴趣的可以了解一下
    2023-08-08
  • 一篇文章带你了解java Object根类中关于toString,equals的方法

    一篇文章带你了解java Object根类中关于toString,equals的方法

    这篇文章主要介绍了Object类toString()和equals()方法使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-09-09
  • Java设计模式笔记之抽象工厂代码示例

    Java设计模式笔记之抽象工厂代码示例

    这篇文章主要介绍了Java设计模式笔记之抽象工厂代码示例,见解独到,代码详细,具有一定参考价值,需要的朋友可以了解下。
    2017-10-10

最新评论