最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

springBoot中的CORS跨域注解@CrossOrigin詳解

 更新時(shí)間:2023年12月04日 08:31:40   作者:allway2  
這篇文章主要介紹了springBoot中的CORS跨域注解@CrossOrigin詳解,通常,服務(wù)于?JS?的主機(jī)(例如?example.com)與服務(wù)于數(shù)據(jù)的主機(jī)(例如?api.example.com)是不同的,在這種情況下,CORS?可以實(shí)現(xiàn)跨域通信,需要的朋友可以參考下

1、概述

在任何現(xiàn)代瀏覽器中,隨著 HTML5 和 JS 客戶端的出現(xiàn),跨域資源共享 (CORS)是一項(xiàng)相關(guān)規(guī)范,這些客戶端通過 REST API 使用數(shù)據(jù)。

通常,服務(wù)于 JS 的主機(jī)(例如 example.com)與服務(wù)于數(shù)據(jù)的主機(jī)(例如 api.example.com)是不同的。在這種情況下,CORS 可以實(shí)現(xiàn)跨域通信。

Spring 為 CORS 提供一流的支持,為在任何 Spring 或 Spring Boot Web 應(yīng)用程序中配置它提供了一種簡單而強(qiáng)大的方式。

2.控制器方法CORS配置

啟用 CORS 很簡單——只需添加注釋@CrossOrigin。

我們可以通過幾種不同的方式實(shí)現(xiàn)這一點(diǎn)。

2.1 @CrossOrigin在@RequestMapping-帶注釋的處理程序方法上

@RestController
@RequestMapping("/account")
public class AccountController {
    @CrossOrigin
    @RequestMapping(method = RequestMethod.GET, path = "/{id}")
    public Account retrieve(@PathVariable Long id) {
        // ...
    }
    @RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
    public void remove(@PathVariable Long id) {
        // ...
    }
}

在上面的示例中,我們只為retrieve()方法啟用了 CORS 。我們可以看到我們沒有為@CrossOrigin注解設(shè)置任何配置,所以它使用默認(rèn)值:

  • 允許所有來源。
  • 允許的 HTTP 方法是在@RequestMapping注釋中指定的方法(本例中為 GET)。
  • 預(yù)檢響應(yīng)的緩存時(shí)間 ( maxAge ) 為 30 分鐘。

2.2 控制器上的@CrossOrigin

@CrossOrigin(origins = "http://example.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
    @RequestMapping(method = RequestMethod.GET, path = "/{id}")
    public Account retrieve(@PathVariable Long id) {
        // ...
    }
    @RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
    public void remove(@PathVariable Long id) {
        // ...
    }
}

這一次,我們?cè)陬惣?jí)別添加了@CrossOrigin。

因此,retrieve()和remove()方法都啟用了它。

我們可以通過指定注釋屬性之一的值來自定義配置:origins、methods、allowedHeaders、exposedHeaders、allowCredentials或maxAge。

2.3 @CrossOrigin關(guān)于控制器和處理程序方法

@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController {
    @CrossOrigin("http://example.com")
    @RequestMapping(method = RequestMethod.GET, "/{id}")
    public Account retrieve(@PathVariable Long id) {
        // ...
    }
    @RequestMapping(method = RequestMethod.DELETE, path = "/{id}")
    public void remove(@PathVariable Long id) {
        // ...
    }
}

Spring 將結(jié)合來自兩個(gè)注解的屬性來創(chuàng)建一個(gè)合并的 CORS 配置。

在這里,兩個(gè)方法的maxAge都是 3,600 秒,remove()方法將允許所有來源,retrieve()方法只允許來自//example.com的來源。

3. 全局 CORS 配置

作為細(xì)粒度的基于注釋的配置的替代方案,Spring 允許我們?cè)诳刂破髦舛x一些全局 CORS 配置。這類似于使用基于Filter的解決方案,但可以在 Spring MVC 中聲明并結(jié)合細(xì)粒度的@CrossOrigin配置。

默認(rèn)情況下,允許所有來源和 GET、HEAD 和 POST 方法。

3.1 Java配置

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }
}

上面的示例啟用了從任何來源到應(yīng)用程序中任何端點(diǎn)的 CORS 請(qǐng)求。

為了進(jìn)一步鎖定這一點(diǎn),registry.addMapping方法返回一個(gè)CorsRegistration對(duì)象,我們可以將其用于其他配置。還有一個(gè)allowedOrigins方法可以讓我們指定一個(gè)允許來源的數(shù)組。如果我們需要在運(yùn)行時(shí)從外部源加載此數(shù)組,這將很有用。

此外,還有allowedMethods、allowedHeaders、exposedHeaders、maxAge 和allowCredentials,我們可以使用它們來設(shè)置響應(yīng)標(biāo)頭和自定義選項(xiàng)。

3.2 XML 命名空間

這個(gè)最小的 XML 配置在/**路徑模式上啟用了 CORS,其默認(rèn)屬性與 JavaConfig 相同:

<mvc:cors>
    <mvc:mapping path="/**" />
</mvc:cors>

也可以使用自定義屬性聲明多個(gè) CORS 映射:

<mvc:cors>
    <mvc:mapping path="/api/**"
        allowed-origins="http://domain1.com, http://domain2.com"
        allowed-methods="GET, PUT"
        allowed-headers="header1, header2, header3"
        exposed-headers="header1, header2" allow-credentials="false"
        max-age="123" />
    <mvc:mapping path="/resources/**"
        allowed-origins="http://domain1.com" />
</mvc:cors>

4. 帶有 Spring Security 的 CORS

如果我們?cè)陧?xiàng)目中使用 Spring Security,我們必須采取額外的步驟來確保它與 CORS 兼容。那是因?yàn)樾枰忍幚?CORS。否則,Spring Security 將在請(qǐng)求到達(dá) Spring MVC 之前拒絕該請(qǐng)求。

幸運(yùn)的是,Spring Security 提供了一個(gè)開箱即用的解決方案:

@EnableWebSecurity
	public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
	    @Override
	    protected void configure(HttpSecurity http) throws Exception {
	        http.cors().and()...
	    }
	}

這篇文章更詳細(xì)地解釋了它。

5. 它是如何工作的

CORS 請(qǐng)求會(huì)自動(dòng)分派到各種已注冊(cè)的HandlerMappings。它們處理 CORS 預(yù)檢請(qǐng)求并使用CorsProcessor 實(shí)現(xiàn)(默認(rèn)為DefaultCorsProcessor)攔截 CORS 簡單和實(shí)際請(qǐng)求,以添加相關(guān)的 CORS 響應(yīng)標(biāo)頭(例如Access-Control-Allow-Origin)。

CorsConfiguration允許我們指定應(yīng)該如何處理 CORS 請(qǐng)求,包括允許的來源、標(biāo)頭和方法等。我們可以通過多種方式提供:

AbstractHandlerMapping#setCorsConfiguration()允許我們指定一個(gè)Map,其中幾個(gè)CorsConfiguration映射到路徑模式,例如/api/**。子類可以通過覆蓋AbstractHandlerMapping#getCorsConfiguration(Object, HttpServletRequest)方法來提供自己的CorsConfiguration 。處理程序可以實(shí)現(xiàn)CorsConfigurationSource 接口(就像現(xiàn)在的ResourceHttpRequestHandler一樣)為每個(gè)請(qǐng)求提供CorsConfiguration。

6. 結(jié)論

在本文中,我們展示了 Spring 如何為在我們的應(yīng)用程序中啟用 CORS 提供支持。

我們從控制器的配置開始。我們看到我們只需要添加注解@CrossOrigin來啟用 CORS 到一個(gè)特定的方法或整個(gè)控制器。

此外,我們了解到,為了在控制器之外控制 CORS 配置,我們可以使用 JavaConfig 或 XML 在配置文件中順利執(zhí)行此操作。

到此這篇關(guān)于springBoot中的CORS跨域注解@CrossOrigin詳解的文章就介紹到這了,更多相關(guān)CORS跨域注解@CrossOrigin內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?AOP實(shí)現(xiàn)用戶登錄統(tǒng)一驗(yàn)證功能

    Spring?AOP實(shí)現(xiàn)用戶登錄統(tǒng)一驗(yàn)證功能

    這篇文章主要為大家詳細(xì)介紹了Spring?AOP如何實(shí)現(xiàn)用戶登錄統(tǒng)一驗(yàn)證功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)具有一定的借鑒價(jià)值,需要的可以參考一下
    2023-01-01
  • Netty分布式從recycler對(duì)象回收站獲取對(duì)象過程剖析

    Netty分布式從recycler對(duì)象回收站獲取對(duì)象過程剖析

    這篇文章主要為大家介紹了Netty分布式從recycler獲取對(duì)象的過程源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • 基于springEL表達(dá)式詳解及應(yīng)用

    基于springEL表達(dá)式詳解及應(yīng)用

    這篇文章主要介紹了springEL表達(dá)式詳解及應(yīng)用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • eclipse啟動(dòng)出現(xiàn)“failed to load the jni shared library”問題解決

    eclipse啟動(dòng)出現(xiàn)“failed to load the jni shared library”問題解決

    這篇文章主要介紹了eclipse啟動(dòng)出現(xiàn)“failed to load the jni shared library”問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11
  • 詳解springboot-mysql-pagehelper分頁插件集成

    詳解springboot-mysql-pagehelper分頁插件集成

    這篇文章主要介紹了springboot-mysql-pagehelper分頁插件集成,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • java 遠(yuǎn)程文件url如何轉(zhuǎn)為輸入流

    java 遠(yuǎn)程文件url如何轉(zhuǎn)為輸入流

    這篇文章主要介紹了java 遠(yuǎn)程文件url如何轉(zhuǎn)為輸入流方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • pagehelper插件顯示total為-1或1的問題

    pagehelper插件顯示total為-1或1的問題

    這篇文章主要介紹了pagehelper插件顯示total為-1或1,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Spring Boot 3 整合 Spring Cloud Gateway實(shí)踐過程

    Spring Boot 3 整合 Spring Cloud 

    本文介紹了如何使用SpringCloudAlibaba2023.0.0.0版本構(gòu)建一個(gè)微服務(wù)網(wǎng)關(guān),包括統(tǒng)一路由、限流防刷和登錄鑒權(quán)等功能,并通過一個(gè)項(xiàng)目實(shí)例進(jìn)行詳細(xì)說明,感興趣的朋友一起看看吧
    2025-02-02
  • javaweb實(shí)現(xiàn)在線支付功能

    javaweb實(shí)現(xiàn)在線支付功能

    這篇文章主要為大家詳細(xì)介紹了javaweb實(shí)現(xiàn)在線支付功能的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • Java?時(shí)間相減算法題解示例

    Java?時(shí)間相減算法題解示例

    這篇文章主要為大家介紹了Java?時(shí)間相減算法題解示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12

最新評(píng)論

绥德县| 开阳县| 隆回县| 宝山区| 自治县| 抚顺市| 金湖县| 南靖县| 隆回县| 上饶市| 永顺县| 宝丰县| 武穴市| 舞钢市| 乐清市| 抚顺县| 峨山| 竹北市| 阿鲁科尔沁旗| 灵山县| 枞阳县| 顺义区| 西盟| 德保县| 鹤山市| 林西县| 佛坪县| 松阳县| 马关县| 桐乡市| 墨竹工卡县| 乌苏市| 台南市| 新邵县| 洛隆县| 定兴县| 金门县| 莆田市| 南丰县| 金塔县| 南陵县|