NIUCLOUD是一款SaaS管理后台框架多应用插件+云编译。上千名开发者、服务商正在积极拥抱开发者生态。欢迎开发者们免费入驻。一起助力发展! 广告
# Spring Boot 的跨域访问 ## CORS简介 - 做WEB开发,特别是前后端分离之后,跨域就是一个不可避免的问题,解决方案也比较多,如jsonp,iframe等,这里我们要说的是**CORS**。 - 许多人还没意识到当前几乎所有的浏览器都可通过名为 **跨域资源共享(Cross-Origin Resource Sharing)** 的协议支持ajax跨域调用。对一个简单的请求,没有自定义头部,要么使用GET,要么使用POST,它的主体是text/plain,请求用一个名叫Orgin的额外的头部发送。Origin头部包含请求页面的头部(协议,域名,端口),这样服务器可以很容易的决定它是否应该提供响应。 - CORS支持的浏览器有: - Chrome 3+ - Firefox 3.5+ - Opera 12+ - Safari 4+ - Internet Explorer 8+ > CORS 并不是Spring Boot的功能,而是SpringMVC4.2以后开始的 ## CORS与JSONP比较: 1. JSONP 只能实现 GET 请求,而 CORS 支持所有类型的 HTTP 请求。 2. 使用 CORS,开发者可以使用普通的 XMLHttpRequest 发起请求和获得数据,比起 JSONP 有更好的 错误处理。 3. JSONP 主要被老的浏览器支持,它们往往不支持 CORS,而绝大多数现代浏览器都已经支持了 CORS ## 全局控制方案 ``` /** * 全局跨域访问 * @author LiuYin */ @Configuration @EnableWebMvc public class CorsConfiguration extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry registry) { // 这个是比较完整的实例 registry.addMapping("/api/**") .allowedOrigins("http://luyou.com") .allowedMethods("PUT","GET") .allowedHeaders("header1","header2","header3") .exposedHeaders("headr5","header4") .allowCredentials(false) .maxAge(3600); // 一般默认也可以这样 registry.addMapping("/api/**") .allowedOrigins("http://luyou.com"); } } ``` ## 局部控制方案(注解) ``` @PostMapping("/save") @CrossOrigin(origins = "http://luyou.com") public long save(User user){ return userService.save(user); } ``` > @CrossOrigin也可以注解在类上 注意:必须明确RequestMethod,如GET、POST