Spring Boot基础教程11-web应用开发-CORS支持

 

 

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

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值