Spring Boot Web应用开发 CORS 跨域请求支持
一、Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等
CORS与JSONP相比
1、JSONP只能实现GET请求,而CORS支持所有类型的HTTP请求。
2、使用CORS,开发者可以使用普通的XMLHttpRequest发起请求和获得数据,比起JSONP有更好的错误处理。
3、JSONP主要被老的浏览器支持,它们往往不支持CORS,而绝大多数现代浏览器都已经支持了CORS
浏览器支持情况
- Chrome3+
- Firefox3.5+
- Opera12+
- Safari4+
- InternetExplorer8+
二、在springMVC中可以配置全局的规则,也可以使用@CrossOrigin注解进行细粒度的配置。
全局配置:
@Configuration
publicclassCustomCorsConfiguration{
@Bean
publicWebMvcConfigurercorsConfigurer(){
returnnewWebMvcConfigurerAdapter(){
@Override
publicvoidaddCorsMappings(CorsRegistryregistry){
registry.addMapping("/api/**").allowedOrigins("http://localhost:8080");
}
};
}
}
或者是
/**
*全局设置
*
*@authorwujing
*/
@Configuration
publicclassCustomCorsConfiguration2extendsWebMvcConfigurerAdapter{
@Override
publicvoidaddCorsMappings(CorsRegistryregistry){
registry.addMapping("/api/**").allowedOrigins("http://localhost:8080");
}
}
定义方法:
/**
*@authorwujing
*/
@RestController
@RequestMapping("/api")
publicclassApiController{
@RequestMapping(value="/get")
publicHashMapget(@RequestParamStringname){
HashMapmap=newHashMap();
map.put("title","helloworld");
map.put("name",name);
returnmap;
}
}
测试js:
$.ajax({
url:"http://localhost:8081/api/get",
type:"POST",
data:{
name:"测试"
},
success:function(data,status,xhr){
console.log(data);
alert(data.name);
}
});
细粒度配置
/**
*@authorwujing
*/
@RestController
@RequestMapping(value="/api",method=RequestMethod.POST)
publicclassApiController{
@CrossOrigin(origins="http://localhost:8080")
@RequestMapping(value="/get")
publicHashMapget(@RequestParamStringname){
HashMapmap=newHashMap();
map.put("title","helloworld");
map.put("name",name);
returnmap;
}
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。