SpringBoot中封裝Cors自動(dòng)配置方式
SpringBoot封裝Cors自動(dòng)配置
在現(xiàn)代 Web 開發(fā)中,跨域資源共享(CORS)是一個(gè)常見的問題。Spring Boot 提供了靈活的方式來處理 CORS 配置。
本文將介紹如何通過自動(dòng)配置的方式,在 Spring Boot 應(yīng)用程序中全局配置 CORS。
背景
當(dāng)瀏覽器從一個(gè)域名的網(wǎng)頁去請(qǐng)求另一個(gè)域名的資源時(shí),會(huì)發(fā)生跨域請(qǐng)求。為了安全起見,默認(rèn)情況下瀏覽器會(huì)阻止這種請(qǐng)求。因此,我們需要在服務(wù)器端進(jìn)行適當(dāng)?shù)呐渲脕碓试S這些跨域請(qǐng)求。
Spring Boot 提供了 CorsRegistry
和 WebMvcConfigurer
接口來進(jìn)行 CORS 配置。然而,如果我們希望在整個(gè)應(yīng)用程序中統(tǒng)一管理 CORS 設(shè)置,可以考慮使用自動(dòng)配置的方式。
實(shí)現(xiàn)步驟
我們將創(chuàng)建兩個(gè)主要類:
- GlobalCorsProperties: 用于存儲(chǔ) CORS 的配置屬性。
- GlobalCorsAutoConfiguration: 用于根據(jù)配置屬性自動(dòng)配置 CORS。
1. 創(chuàng)建 GlobalCorsProperties 類
這個(gè)類將負(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 類
這個(gè)類將在 Spring Boot 啟動(dòng)時(shí)根據(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 實(shí)例 */ @Autowired private RequestMappingHandlerMapping requestMappingHandlerMapping; @Override public void afterPropertiesSet() throws Exception { // 獲取 GlobalCorsProperties 并設(shè)置 CORS 配置 requestMappingHandlerMapping.setCorsConfigurations(SpringContextHolder.getApplicationContext() .getBean(GlobalCorsProperties.class).getCorsConfigurations()); } }
3. 配置 application.properties 文件
最后,我們?cè)?application.properties 文件中添加相應(yīng)的配置項(xià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
如果你把這個(gè)自動(dòng)配置封裝到自己的 starter
中,還需要將 GlobalCorsAutoConfiguration
類添加到
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件中。
總結(jié)
通過以上步驟,我們成功地在 Spring Boot 應(yīng)用程序中實(shí)現(xiàn)了 CORS 的自動(dòng)配置。
這種方式不僅簡(jiǎn)化了 CORS 的配置過程,還使得我們的代碼更加模塊化和易于維護(hù)。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- SpringBoot統(tǒng)一API響應(yīng)結(jié)果封裝的示例詳解
- SpringBoot okhtt工具類封裝方式
- 使用Springboot封裝好的發(fā)送post請(qǐng)求的工具類
- SpringBoot3實(shí)現(xiàn)統(tǒng)一結(jié)果封裝的示例代碼
- springboot泛型封裝開發(fā)方式
- SpringBoot實(shí)現(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)聽器需要實(shí)現(xiàn)ApplicationListener接口,實(shí)現(xiàn)對(duì)應(yīng)的方法來完成自己的業(yè)務(wù)邏輯。SpringBoot Application共支持6種事件監(jiān)聽2023-04-04JVM性能調(diào)優(yōu)之運(yùn)行時(shí)參數(shù)小結(jié)
jvm是java的運(yùn)行環(huán)境,在jvm中有很多的參數(shù)可以進(jìn)行設(shè)置,本文主要介紹了JVM性能調(diào)優(yōu)之運(yùn)行時(shí)參數(shù)小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-04-04SpringBoot@Profile注解和Spring?EL(多環(huán)境注入)
為了方便, Spring還提供了 Profile機(jī)制, 使我們可以很方便地實(shí)現(xiàn)各個(gè)環(huán)境之間的切換,在使用DI來依賴注入的時(shí)候,能夠根據(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專項(xiàng)精講
FlowLayout-流式布局管理器,按水平方向依次排列放置組件,排滿一行,換下一行繼續(xù)排列。排列方向(左到右 或 右到左)取決于容器的componentOrientation屬性2022-04-04SpringBoot項(xiàng)目運(yùn)行jar包啟動(dòng)的步驟流程解析
這篇文章主要介紹了SpringBoot項(xiàng)目運(yùn)行jar包啟動(dòng)的步驟流程,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2020-07-07springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤的示例代碼
這篇文章主要介紹了springboot整合dubbo設(shè)置全局唯一ID進(jìn)行日志追蹤,本文通過圖文示例相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10