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){ HashMap map=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){ HashMap map=newHashMap (); map.put("title","helloworld"); map.put("name",name); returnmap; } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。