假如我們開發了一些接口部署到網上,而我們的客戶也有一個網站,會通過ajax請求我們的接口,並將結果展示到他們的網站,這就是跨域。
直接請求No Access-Control-Allow-Origin
我現在192.168.112.1上啓動一個客戶項目,用jquery向接口服務器192.168.112.150:8080/test發起ajax請求
$.ajax({
url : 'http://192.168.112.150:8080/test',
type : 'get',
success : function(d) {
}
});
瀏覽器控制檯會報錯:No 'Access-Control-Allow-Origin' header is present on the requested。意思是該資源不允許跨域請求。
配置跨域請求
在接口服務器做以下配置,/**表示所有接口允許跨域,也可以只配置一部分接口,再次請求就不會報錯了。@SpringBootConfiguration
public class Config implements WebMvcConfigurer{
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**");
}
}
設置白名單
以上配置,默認所有其他服務都可以發起跨域請求,存在安全問題,修改修改可以設定只允許指定ip跨域請求
registry.addMapping("/**")
.allowedOrigins("http://192.168.112.1:8081");
注意:此時在瀏覽器用localhost請求html是不能跨域的,因爲這裏配的是ip,所以只認ip域名,參數中可以配多個ip。關於WebMvcConfigurer
在第19篇中我用extends WebMvcConfigurerAdapter來實現web mvc配置,這在spring boot2中已經不建議使用,而推薦使用implements WebMvcConfigurer接口的方式實現web mvc配置。