温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2020-09-02 09:07:29 来源:脚本之家 阅读:127 作者:jerome_s 栏目:编程语言

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

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

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI