SpringBoot中封裝Cors自動配置方式
SpringBoot封裝Cors自動配置
在現(xiàn)代 Web 開發(fā)中,跨域資源共享(CORS)是一個常見的問題。Spring Boot 提供了靈活的方式來處理 CORS 配置。
本文將介紹如何通過自動配置的方式,在 Spring Boot 應(yīng)用程序中全局配置 CORS。
背景
當(dāng)瀏覽器從一個域名的網(wǎng)頁去請求另一個域名的資源時,會發(fā)生跨域請求。為了安全起見,默認(rèn)情況下瀏覽器會阻止這種請求。因此,我們需要在服務(wù)器端進(jìn)行適當(dāng)?shù)呐渲脕碓试S這些跨域請求。
Spring Boot 提供了 CorsRegistry
和 WebMvcConfigurer
接口來進(jìn)行 CORS 配置。然而,如果我們希望在整個應(yīng)用程序中統(tǒng)一管理 CORS 設(shè)置,可以考慮使用自動配置的方式。
實現(xiàn)步驟
我們將創(chuàng)建兩個主要類:
- GlobalCorsProperties: 用于存儲 CORS 的配置屬性。
- GlobalCorsAutoConfiguration: 用于根據(jù)配置屬性自動配置 CORS。
1. 創(chuàng)建 GlobalCorsProperties 類
這個類將負(fù)責(zé)讀取配置文件中的 CORS 屬性,并將其暴露給其他組件使用。
/** * Cors全局配置 * * @author 單紅宇 * @since 2025/2/18 17:18 */ @Data @ConfigurationProperties("spring.web.globalcors") public class GlobalCorsProperties { /** * 是否啟用 CORS 全局配置 */ private boolean enabled = false; /** * CORS 配置映射 */ private final Map<String, CorsConfiguration> corsConfigurations = new LinkedHashMap<>(); }
2. 創(chuàng)建 GlobalCorsAutoConfiguration 類
這個類將在 Spring Boot 啟動時根據(jù) GlobalCorsProperties 中的配置來設(shè)置 CORS。
/** * 全局Cors配置 * * @author 單紅宇 * @since 2025/2/18 17:33 */ @AutoConfiguration @Import(GlobalCorsProperties.class) @ConditionalOnClass(SimpleUrlHandlerMapping.class) @ConditionalOnProperty(name = "spring.web.globalcors.enabled", havingValue = "true") public class GlobalCorsAutoConfiguration implements InitializingBean { /** * RequestMappingHandlerMapping 實例 */ @Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping; @Override public void afterPropertiesSet() throws Exception { // 獲取 GlobalCorsProperties 并設(shè)置 CORS 配置 requestMappingHandlerMapping.setCorsConfigurations(SpringContextHolder.getApplicationContext() .getBean(GlobalCorsProperties.class).getCorsConfigurations()); } }
3. 配置 application.properties 文件
最后,我們在 application.properties 文件中添加相應(yīng)的配置項。
spring.web.globalcors.enabled=true spring.web.globalcors.cors-configurations.[/**].allow-credentials=true spring.web.globalcors.cors-configurations.[/**].allowed-headers=* spring.web.globalcors.cors-configurations.[/**].allowed-methods=GET,POST,PUT,DELETE,OPTIONS spring.web.globalcors.cors-configurations.[/**].allowed-origin-patterns=http://localhost:3000 spring.web.globalcors.cors-configurations.[/**].max-age=1800
如果你把這個自動配置封裝到自己的 starter
中,還需要將 GlobalCorsAutoConfiguration
類添加到
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件中。
總結(jié)
通過以上步驟,我們成功地在 Spring Boot 應(yīng)用程序中實現(xiàn)了 CORS 的自動配置。
這種方式不僅簡化了 CORS 的配置過程,還使得我們的代碼更加模塊化和易于維護(hù)。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
- SpringBoot統(tǒng)一API響應(yīng)結(jié)果封裝的示例詳解
- SpringBoot okhtt工具類封裝方式
- 使用Springboot封裝好的發(fā)送post請求的工具類
- SpringBoot3實現(xiàn)統(tǒng)一結(jié)果封裝的示例代碼
- springboot泛型封裝開發(fā)方式
- SpringBoot實現(xiàn)全局異常的封裝和統(tǒng)一處理
- SpringBoot+Vue跨域配置(CORS)問題得解決過程
- springboot解決使用localhost或127.0.01模擬CORS失效
- 解讀SpringBoot中addCorsMappings配置跨域與攔截器互斥問題的原因
相關(guān)文章
SpringBoot ApplicationListener事件監(jiān)聽接口使用問題探究
這篇文章主要介紹了SpringBoot ApplicationListener事件監(jiān)聽接口使用問題,自定義監(jiān)聽器需要實現(xiàn)ApplicationListener接口,實現(xiàn)對應(yīng)的方法來完成自己的業(yè)務(wù)邏輯。SpringBoot Application共支持6種事件監(jiān)聽2023-04-04JVM性能調(diào)優(yōu)之運(yùn)行時參數(shù)小結(jié)
jvm是java的運(yùn)行環(huán)境,在jvm中有很多的參數(shù)可以進(jìn)行設(shè)置,本文主要介紹了JVM性能調(diào)優(yōu)之運(yùn)行時參數(shù)小結(jié),具有一定的參考價值,感興趣的可以了解一下2024-04-04SpringBoot@Profile注解和Spring?EL(多環(huán)境注入)
為了方便, Spring還提供了 Profile機(jī)制, 使我們可以很方便地實現(xiàn)各個環(huán)境之間的切換,在使用DI來依賴注入的時候,能夠根據(jù)@profile標(biāo)明的環(huán)境,將注入符合當(dāng)前運(yùn)行環(huán)境的相應(yīng)的bean,本文通過示例代碼介紹SpringBoot@Profile注解和Spring?EL,需要的朋友可以參考下2024-02-02Java GUI進(jìn)階之流式布局管理器FlowLayout專項精講
FlowLayout-流式布局管理器,按水平方向依次排列放置組件,排滿一行,換下一行繼續(xù)排列。排列方向(左到右 或 右到左)取決于容器的componentOrientation屬性2022-04-04SpringBoot項目運(yùn)行jar包啟動的步驟流程解析
這篇文章主要介紹了SpringBoot項目運(yùn)行jar包啟動的步驟流程,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧2020-07-07springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤的示例代碼
這篇文章主要介紹了springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤,本文通過圖文示例相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10