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;
 }
}

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

相关文章

  • 写了两年代码之后再来谈一谈Spring中的Bean

    写了两年代码之后再来谈一谈Spring中的Bean

    这篇文章主要介绍了写了两年代码之后再来看看Spring中的Bean,这里列出四种常用的添加Bean的方式,介绍最基本的@Bean注解,@Bean注解声明这个类是一个Bean,需要的朋友可以参考下
    2021-10-10
  • 一个简单的Java文件读取的进度条

    一个简单的Java文件读取的进度条

    这篇文章主要介绍了一个简单的Java文件读取的进度条,写一个可以使用的 demo,涉及到了文件的相对路径问题,需要的朋友可以参考下
    2023-04-04
  • SpringBoot整合阿里云开通短信服务详解

    SpringBoot整合阿里云开通短信服务详解

    这篇文章主要介绍了如何利用SpringBoot整合阿里云实现短信服务的开通,文中的示例代码讲解详细,对我们学习有一定帮助,需要的可以参考一下
    2022-03-03
  • 对SpringBoot项目Jar包进行加密防止反编译

    对SpringBoot项目Jar包进行加密防止反编译

    最近项目要求部署到其他公司的服务器上,但是又不想将源码泄露出去,要求对正式环境的启动包进行安全性处理,防止客户直接通过反编译工具将代码反编译出来,本文介绍了如何对SpringBoot项目Jar包进行加密防止反编译,需要的朋友可以参考下
    2023-10-10
  • Spring Boot中如何使用Swagger详解

    Spring Boot中如何使用Swagger详解

    Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful风格的Web服务,这篇文章主要给大家介绍了关于Spring Boot中如何使用Swagger的相关资料,需要的朋友可以参考下
    2021-08-08
  • Java数据结构与算法学习之双向链表

    Java数据结构与算法学习之双向链表

    双向链表也叫双链表,是链表的一种,它的每个数据结点中都有两个指针,分别指向直接后继和直接前驱。所以,从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点。本文将为大家详细介绍双向链表的特点与使用,需要的可以参考一下
    2021-12-12
  • java中应用Stack进行算术运算的操作

    java中应用Stack进行算术运算的操作

    这篇文章主要介绍了java中应用Stack进行算术运算的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Java中的Cglib动态代理详细解读

    Java中的Cglib动态代理详细解读

    这篇文章主要介绍了Java中的Cglib动态代理详细解读,CGLib是一个强大的、高性能、高质量的 Code 生成类库,它可以在运行期扩展 Java 类与实现 Java 接口,需要的朋友可以参考下
    2023-11-11
  • DUCC配置平台实现一个动态化线程池示例代码

    DUCC配置平台实现一个动态化线程池示例代码

    这篇文章主要为大家介绍了DUCC配置平台实现一个动态化线程池示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • Java多线程的其他知识_动力节点Java学院整理

    Java多线程的其他知识_动力节点Java学院整理

    这篇文章主要介绍了Java多线程的其他知识,需要的朋友可以参考下
    2017-05-05

最新评论