出於安全的考慮,瀏覽器會禁止 Ajax 訪問不同域的地址,在現如今微服務橫行的年代,跨域訪問是非常常見的。W3C 的 CORS (Cross-origin-resource-sharing) 規範中也已經允許跨域訪問, 並被主流瀏覽器所支持,它們包括: Chrome 3+; Firefox 3.5+ ...
出於安全的考慮,瀏覽器會禁止 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;
/**
* @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;
/**
* @time 下午8:36
* @discription
**/
public class CORSConfig extends WebMvcConfigurerAdapter {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/api/**")
.allowedOrigins("http://www.baidu.com")
.allowedMethods("POST", "GET");
}
}
通過上面的配置,只允許來自 www.exception.site 的跨域訪問,並且限定只能對 /api
下的所有介面進行跨域訪問,同時只能訪問 POST
和 GET
方法。
跨域訪問的原理
跨域訪問的原理其實很簡單,當發起跨域請求的時候,瀏覽器會對請求域返回的 HTTP
頭進行檢查,如果 Access-Control-Allow-Origin
包含了自身域,則表示允許訪問,否者報錯。這也正是上述代碼中 allowedOrigins()
方法的作用。
本文來自博客園,作者:深碼青年,轉載請註明原文鏈接:https://www.cnblogs.com/shenMaQN/p/17759771.html