SpringBoot跨域問題

2022-09-13 15:24:09 字數 2457 閱讀 8064

為什麼需要跨域,而不直接訪問其他域下的資源呢?這是瀏覽器的限制,專業點說叫瀏覽器同源策略限制。主要是為了安全考慮。現在的安全框架,一般請求的時候header中不是都存個token嘛,你要是用這個token去正常訪問a域下的東西是沒問題的,然後又去訪問了b域,結果陰差陽錯的還帶著這個token,那麼b域,或者說b**是不是就可以拿著你的token去a域下做點什麼呢,這就相當危險了。所以瀏覽器加上了所謂的瀏覽器同源策略限制。但是為了我們真的需要從a域下訪問b的資源(正常訪問),就需要用到跨域,跨越這個限制了。

springboot可以基於cors解決跨域問題,cors是一種機制,告訴我們的後台,哪邊(origin )來的請求可以訪問伺服器的資料。

全域性配置

配置例項如下:

@configuration

public class corsconfig implements webmvcconfigurer

}

看下corsregistry原始碼,十分簡單:

public class corsregistry 

protected mapgetcorsconfigurations()

return configs;

}}

可以看出corsregistry 有個屬性registrations ,按道理可以根據不同的專案路徑進行定製訪問行為,但是我們示例直接將pathpattern 設定為 /**,也就是說已覆蓋專案所有路徑,只需要建立乙個corsregistration就好。getcorsconfigurations(),這個方法是獲取所有corsconfiguration的map集合,key值為傳入路徑pathpattern。

public class corsregistration 

//允許哪些源**訪問,預設所有

public corsregistration allowedorigins(string... origins)

//允許何種方式訪問,預設簡單方式,即:get,head,post

public corsregistration allowedmethods(string... methods)

//設定訪問header,預設所有

public corsregistration allowedheaders(string... headers)

//設定response headers,預設沒有(什麼都不設定)

public corsregistration exposedheaders(string... headers)

//是否瀏覽器應該傳送credentials,例如cookies access-control-allow-credentials

public corsregistration allowcredentials(boolean allowcredentials)

//設定等待時間,預設1800秒

public corsregistration maxage(long maxage)

protected string getpathpattern()

protected corsconfiguration getcorsconfiguration()

}

區域性配置

剛才遇到乙個@crossorigin這個註解,看看它是幹什麼的?

@target()

@retention(retentionpolicy.runtime)

@documented

public @inte***ce crossorigin ;

@deprecated

string default_allowed_headers = ;

@deprecated

boolean default_allow_credentials = false;

@deprecated

long default_max_age = 1800

/*** alias for .

*/@aliasfor("origins")

string value() default {};

@aliasfor("value")

string origins() default {};

string allowedheaders() default {};

string exposedheaders() default {};

requestmethod methods() default {};

string allowcredentials() default "";

long maxage() default -1;

}

這個註解可以作用於方法或者類上,實現區域性跨域,你會發現除了設定路徑(因為沒必要了,都定位到區域性了)其他的引數與全域性類似。

spring boot跨域問題

方式一 直接寫乙個 配置類 其他 不變 configuration public class orginconfig bean public corsfilter corsfilter 方式二 直接寫乙個 配置類 configuration public class weboriginconfig ...

springboot跨域問題

最近遇到乙個問題 前端訪問一直跨域 然後又是那種單獨頁面的 後來找到了開啟cors的方法解決 直接在控制器層加上 crossorigin註解即可開啟cors import org.springframework.web.bind.annotation.crossorigin import org.s...

springboot跨域問題

在使用springboot 進行開發時往往會遇到跨域問題 今天先介紹一下我在本地除錯的時候遇到的跨域問題 響應頭中有乙個access control allow origin欄位,用來記錄可以訪問該資源的域。當瀏覽器收到這樣的響應頭資訊之後,提取出access control allow origi...