原文:https://www.jianshu.com/p/840b4f83c3b5
目前的程序開發,大部分都采用前后台分離。這樣一來,就都會碰到跨域資源共享CORS的問題。Spring Boot 2 對此提供了很好的解決方法。
更多CORS介紹,請看這里: CORS介紹
1、注解實現
在Spring Boot 2中,提供了注解的方式來對CORS跨域訪問進行支持。
1.1 在方法上注解
可以將@CrossOrigin注解在方法上。這樣該方法可以被跨域訪問。

在方法上標注
1.2 在Controller上注解
也可以對整個Controller上注解。這樣整個Controller下的所有方法都支持跨域訪問。

在Controller上標注
1.3 同時注解
二者同時注解也可以,此時取的是二者的組合。
如下所示,Controller可以被所有來源訪問,但/user只能被http://localhost:9000訪問。

組合注解
1.4 注解細項配置
默認情況下,@CrossOrigin允許所有的來源,所有的Header,@RequestMapping注解中指定的HTTP方法被跨域訪問,並支持最大30分鍾的maxAge。 您可以覆蓋這些注解屬性值,以進行個性化設置:
屬性 | 說明 |
---|---|
origins | 允許的來源列表。響應信息會放在HTTP協議Header的Access-Control-Allow-Origin中 -*- 所有的來源都被允許 --- 如果未定義,則允許所有來源) |
allowedHeaders | 實際請求期間可以使用的請求頭列表。該值用於預檢的響應Header中的Access-Control-Allow-Headers信息。 -*- 意味着允許客戶端請求的所有頭信息。 --- 如果未定義,則允許所有請求的headers。 |
methods | 服務器端支持的HTTP請求方法列表。 -*- 所有方法。 --- 如果未定義,則使用由RequestMapping注解定義的方法。 |
exposedHeaders | 瀏覽器允許客戶端訪問的響應頭列表。 在實際響應報頭Access-Control-Expose-Headers中設置值。 –-- 如果未定義,則使用空的暴露標題列表。 |
allowCredentials | 它確定瀏覽器是否應該包含與請求相關的任何cookie。 -false- 不允許包含Cookies 。 –true– 允許攜帶Cookies。 –""- (空字符串) 意味着未定義。 –-- 如果未定義,則允許所有憑據。 |
maxAge | 預響應緩存持續時間的最大時間(以秒為單位)。 該值在Header的Access-Control-Max-Age中設置。 –-- 如果未定義, 最大時間設置為1800秒(30分鍾) |
2、全局配置
在Spring Boot 2中,通過復寫WebMvcConfigurer中的addCorsMapping方法,可以達到全局配置的目標。
@Configuration public class CorsConfiguration implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry corsRegistry) { // 允許跨域訪問資源定義: /api/ 所有資源 corsRegistry.addMapping("/api/**") // 只允許本地的9000端口訪問 .allowedOrigins("http://localhost:9000", "http://127.0.0.1:9000") // 允許發送Cookie .allowCredentials(true) // 允許所有方法 .allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD"); } }
作者:Jackeroo
鏈接:https://www.jianshu.com/p/840b4f83c3b5
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯系作者獲得授權並注明出處。