Spring Boot 跨域访问
一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动
目前,正在
星球
内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4
,手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观
。
本节中,您将学习如何在 Spring Boot 中配置跨域访问。首先,我们了解下什么是跨域访问?
出于安全的考虑,浏览器会禁止 Ajax
访问不同域的地址,在现如今微服务横行的年代,跨域访问是非常常见的。W3C 的 CORS (Cross-origin-resource-sharing
) 规范中也已经允许跨域访问, 并被主流浏览器所支持,它们包括:
- Chrome 3+;
- Firefox 3.5+;
- Opera 12+;
- Safari 4+;
- IE 8+;
如何在 Spring Boot 中配置跨域访问呢?
Spring Boot 提供了对 CORS 的支持,您可以实现 addCorsMappings
接口来添加规则来允许跨域访问:
package site.exception.config;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* @author www.exception.site (exception 教程网)
* @date 2019/2/13
* @time 下午8:36
* @discription
**/
public class CORSConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
// 允许所有跨域访问
registry.addMapping("/**");
}
}
/**
允许所有域名都能够跨域访问,下面看看更为精细的控制:
package site.exception.config;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* @author www.exception.site (exception 教程网)
* @date 2019/2/13
* @time 下午8:36
* @discription
**/
public class CORSConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://www.exception.site")
.allowedMethods("POST", "GET");
}
}
通过上面的配置,只允许来自 www.exception.site 的跨域访问,并且限定只能对 /api
下的所有接口进行跨域访问,同时只能访问 POST
和 GET
方法。
跨域访问的原理
跨域访问的原理其实很简单,当发起跨域请求的时候,浏览器会对请求域返回的 HTTP
头进行检查,如果 Access-Control-Allow-Origin
包含了自身域,则表示允许访问,否者报错。这也正是上述代码中 allowedOrigins()
方法的作用。