Spring Boot 跨域访问

打印 上一主题 下一主题

主题 910|帖子 910|积分 2730


出于安全的考虑,浏览器会禁止 Ajax 访问不同域的地址,在现如今微服务横行的年代,跨域访问是非常常见的。W3C 的 CORS (Cross-origin-resource-sharing) 规范中也已经允许跨域访问, 并被主流浏览器所支持,它们包括:

  • Chrome 3+;
  • Firefox 3.5+;
  • Opera 12+;
  • Safari 4+;
  • IE 8+;
如何在 Spring Boot 中配置跨域访问呢?

Spring Boot 提供了对 CORS 的支持,您可以实现 addCorsMappings 接口来添加规则来允许跨域访问:
  1. package site.exception.config;
  2. import org.springframework.web.servlet.config.annotation.CorsRegistry;
  3. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  4. /**
  5. * @time 下午8:36
  6. * @discription
  7. **/
  8. public class CORSConfig extends WebMvcConfigurerAdapter {
  9. @Override
  10. public void addCorsMappings(CorsRegistry registry) {
  11. // 允许所有跨域访问
  12. registry.addMapping("/**");
  13. }
  14. }
复制代码
/** 允许所有域名都能够跨域访问,下面看看更为精细的控制:
  1. package site.exception.config;
  2. import org.springframework.web.servlet.config.annotation.CorsRegistry;
  3. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
  4. /**
  5. * @time 下午8:36
  6. * @discription
  7. **/
  8. public class CORSConfig extends WebMvcConfigurerAdapter {
  9. @Override
  10. public void addCorsMappings(CorsRegistry registry) {
  11. registry.addMapping("/api/**")
  12. .allowedOrigins("http://www.baidu.com")
  13. .allowedMethods("POST", "GET");
  14. }
  15. }
复制代码
通过上面的配置,只允许来自 www.exception.site 的跨域访问,并且限定只能对 /api 下的所有接口进行跨域访问,同时只能访问 POST 和 GET 方法。
跨域访问的原理

跨域访问的原理其实很简单,当发起跨域请求的时候,浏览器会对请求域返回的 HTTP 头进行检查,如果 Access-Control-Allow-Origin 包含了自身域,则表示允许访问,否者报错。这也正是上述代码中 allowedOrigins() 方法的作用。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表