🍅 作者簡介:哪吒,CSDN2021博客之星亞軍🏆、新星計劃導師?、博客專家💪
🍅 哪吒多年工作總結:Java學習路線總結,搬磚工逆襲Java架構師
🍅 技術交流:定期更新Java硬核干貨,不定期送書活動
🍅 點擊文末名片,關注公眾號【哪吒編程】,回復 1024 ,獲取《10萬字208道Java經典面試題總結(附答案)》2024修訂版pdf,背題更方便,一文在手,面試我有
目錄
- Spring Boot如何實現跨域資源共享(CORS)?
- 方法一:使用@CrossOrigin注解
- 方法二:配置全局CORS
- 總結一下,Spring Boot 中如何解決跨域問題 ?
嗨,你好呀,我是哪吒。
Spring Boot如何實現跨域資源共享(CORS)?
方法一:使用@CrossOrigin注解
在控制器類或者具體的方法上使用@CrossOrigin注解。這個注解是Spring框架自帶的,用于允許跨域訪問。
@RestController
public class MyController {@CrossOrigin(origins = "http://example.com") // 允許指定域名的跨域請求@GetMapping("/api/data")public ResponseEntity<?> getData() {// ...}
}
你還可以使用通配符來允許所有域名的跨域請求:
@CrossOrigin(origins = "*") // 允許所有域名的跨域請求
方法二:配置全局CORS
創建一個配置類,使用WebMvcConfigurer的實現來全局配置CORS。
@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/api/**") // 允許跨域請求的路徑.allowedOrigins("http://example.com") // 允許的域名列表.allowedMethods("GET", "POST", "PUT", "DELETE") // 允許的HTTP方法.allowedHeaders("*") // 允許的HTTP頭.allowCredentials(true) // 是否允許證書(cookies).maxAge(3600); // 預請求的有效期}
}
同樣,你也可以使用通配符來允許所有域名:
registry.addMapping("/api/**").allowedOrigins("*")// 其他配置...
注意事項:
- 使用@CrossOrigin注解時,它只影響帶有該注解的控制器或方法。
- 使用全局CORS配置時,它會影響所有未明確拒絕的跨域請求。
- 出于安全考慮,生產環境中應該明確允許的域名,而不是使用通配符*。
- CORS配置中的allowedHeaders參數應該明確指定所需的頭信息,而不是使用*,以減少安全風險。
通過以上兩種方法,你可以在Spring Boot應用中實現跨域資源共享,從而允許不同域的前端應用訪問你的后端服務。
總結一下,Spring Boot 中如何解決跨域問題 ?
在Spring Boot中解決跨域問題,可以采用以下幾種方法:
- 使用@CrossOrigin注解:可以在控制器類或方法上添加@CrossOrigin注解來允許特定的跨域請求。這個注解支持指定允許的源、方法、頭部等信息。
- 通過配置文件:在application.properties或application.yml中添加全局的CORS配置,以允許所有域的跨域請求或者限制只允許特定的域名進行跨域請求。
- 自定義CorsFilter:創建一個CorsFilter類,實現Filter接口,并在doFilter方法中添加CORS相關的響應頭。然后在Spring Boot的主配置類中注冊這個過濾器。
- 使用WebMvcConfigurer:通過實現WebMvcConfigurer接口的addCorsMappings方法,可以更細致地控制哪些路徑需要CORS支持。
- 利用第三方庫:也可以使用如cors-filter等第三方庫來簡化CORS配置過程。
- 使用ResponseEntity:在返回ResponseEntity時,可以手動設置Access-Control-Allow-Origin等響應頭來實現跨域。
- 使用全局異常處理:通過全局異常處理機制,捕獲特定的異常并設置相應的CORS響應頭。
- 使用Spring Security:如果項目中使用了Spring Security,還需要確保Spring Security的配置不阻止跨域請求。
- 使用代理服務器:在某些情況下,也可以通過設置代理服務器來解決跨域問題,但這通常不是首選方案。
- 使用JSONP:對于GET請求,還可以考慮使用JSONP來繞過瀏覽器的同源策略,但這僅適用于GET請求,并且需要在前端和后端都進行相應的配置。
- 使用服務端路由:在服務端使用路由機制,將請求轉發到不同的域,從而避免直接跨域。
- 使用WebSocket:對于實時通信,可以考慮使用WebSocket協議,它不受同源策略的限制。
跨域問題是由于瀏覽器的同源策略引起的,它要求只有來自同一源(協議+域名+端口)的腳本才能訪問某些資源。在開發前后端分離的應用時,跨域問題是一個常見的挑戰,因此了解如何在Spring Boot中解決這個問題是非常重要的。
🏆文章收錄于:Spring Boot 進階實戰
哪吒數年工作總結之結晶。
🏆哪吒多年工作總結:Java學習路線總結,搬磚工逆襲Java架構師。
華為OD機試 2023B卷題庫瘋狂收錄中,刷題點這里
刷的越多,抽中的概率越大,每一題都有詳細的答題思路、詳細的代碼注釋、樣例測試,發現新題目,隨時更新,全天CSDN在線答疑。