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

  或者是

@Configuration
public class CustomCorsConfiguration2 extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**").allowedOrigins("http://localhost:8080");
}
}

  定义方法:

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

细粒度配置:

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

  

最新文章

  1. 谈谈对HTML语义化的理解
  2. js页面跳转整理
  3. Oracle数据库字符集修改
  4. Uva11300 Spreading the Wealth
  5. MySQL基础(四)——索引
  6. AngularJS - 插件,module注入
  7. 启动hadoop,报错Error JAVA_HOME is not set and could not be found
  8. 从Select语句看Oracle查询原理(了解Oracle的查询机制)
  9. 内存管理之三——Cocos2d-x学习历程(七)
  10. JS算法与数据结构之八皇后(晕晕)
  11. java对象引用-要掌握的细节
  12. 越光后端开发——ygapi(1.新建项目ygapi、新建MySQL数据库yg、项目连接数据库)
  13. 修改主机时间对MySQL影响
  14. vue-cli3 第三版安装搭建项目
  15. 一个完整的hadoop程序开发过程
  16. UVA1428 Ping pong
  17. C/S架构引用Lodop 如何在C#调用web打印控件Lodop
  18. Real-time qPCR So Easy?
  19. openssl RSA加密方法初识
  20. iOS开发-UIScrollView图片无限循环

热门文章

  1. svn: E155017: Checksum mismatch while updating 校验错误的解决方法
  2. Day 03 知识点[python程序运行的方式、变量、注释、内存管理、数据类型]
  3. React和Vue中,是如何监听变量变化的
  4. 紫书 例题8-1 UVa 120(构造法)
  5. VUE:事件处理和表单输入绑定
  6. CSS隐藏overflow默认滚动条同时保留滚动效果
  7. 【codeforces 733E】Sleep in Class
  8. 【SPOJ-GSHOP】Rama and Friends【贪心】【细节】
  9. 初识Dubbo 系列之5-Dubbo 成熟度
  10. Oracle Study之--Oracle 单实例11.2.0.1.0升级到11.2.0.3.0