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

Spring中的@CrossOrigin注解的使用詳細解讀

 更新時間:2023年11月17日 10:38:09   作者:securitit  
這篇文章主要介紹了Spring中的@CrossOrigin注解的使用詳細解讀,跨源資源共享(CORS),是由大多數(shù)瀏覽器實現(xiàn)的W3C規(guī)范,允許對跨域請求進行靈活授權(quán),用來代替IFRAME或JSONP等非正規(guī)實現(xiàn)方式,需要的朋友可以參考下

@CrossOrigin注解的使用

跨源資源共享(CORS),是由大多數(shù)瀏覽器實現(xiàn)的W3C規(guī)范,允許對跨域請求進行靈活授權(quán),用來代替IFRAME或JSONP等非正規(guī)實現(xiàn)方式。

@CrossOrigin是用來處理跨源資源共享(CORS)的注解。

注解解析

① value:

指定允許請求源列表,例如:value="//example.com"。

*表示允許來自任意請求源的請求。

其值存儲在響應(yīng)標頭Access-Control-Allow-Origin中。

默認情況下,其值為*,允許來自任意請求源的請求。

注意:CORS處理時,從Forwarded、X-Forwarded-Host、X-Forwarded-Port、X-Forwarded-Proto取請求源值。

② origins:

value與origins含義相同,可以任選value和origins進行設(shè)置。

value與origins若同時存在,兩者的值需一致,否則啟動時會出現(xiàn)異常。

Caused by: org.springframework.core.annotation.AnnotationConfigurationException: In annotation [org.springframework.web.bind.annotation.CrossOrigin] declared on public java.lang.String com.arhorchin.securitit.webannotations.CrossOriginController.crossOriginOrigins(java.util.Map) throws java.lang.Exception and synthesized from [@org.springframework.web.bind.annotation.CrossOrigin(maxAge=-1, methods=[], exposedHeaders=[], origins=[http://localhost:9299], allowedHeaders=[], value=[http://localhost:92991], allowCredentials=)], attribute 'origins' and its alias 'value' are present with values of [{http://localhost:9299}] and [{http://localhost:92991}], but only one is permitted.

③ allowedHeaders:

指定允許實際請求標頭列表,例如:allowedHeaders="Content-Type,Access-Token"。

*表示允許實際請求帶有任意標頭。

其值存儲在響應(yīng)標頭Access-Control-Allow-Headers中。

若為Cache-Control、Content-Language、Expires、Last-Modified、Pragma,則無需設(shè)置。

默認情況下,其值為*,允許實際請求帶有任意標頭。

④ exposedHeaders:

指定允許客戶端(如瀏覽器)訪問的響應(yīng)標頭列表,例如:exposedHeaders="Content-Length"。

其值存儲在實際CORS請求的響應(yīng)頭Access-Control-Expose-Headers中。

默認情況下,只允許客戶端訪問:Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。

?⑤ methods:

指定允許請求的HTTP方法。

默認情況下,允許請求的HTTP方法與@RequestMapping相同。

⑥ allowCredentials:

指定其值,表示客戶端(如瀏覽器)是否應(yīng)將憑證(如Cookies)和跨域請求一起發(fā)送到服務(wù)器。

其值存儲在預(yù)處理響應(yīng)標頭Access-Control-Allow-Credentials中。

注意:此選項與配置域建立了高級別的信任,由于公開敏感的信息(如Cookies或CSRF令牌),會增加Web應(yīng)用程序受攻擊的概率。

默認情況下,此值不設(shè)置,因此不允許使用任何憑證。

⑦ maxAge:

指定預(yù)處理響應(yīng)的最大緩存期限,單位為秒。

其值存儲在預(yù)處理響應(yīng)標頭Access-Control-Max-Age中。

其值設(shè)置合理可以有效減少客戶端與服務(wù)器預(yù)處理請求的交互次數(shù)。

其值為負,表示未定義。

默認情況下,其值為1800秒(30分鐘)。

⑧ DEFAULT_ORIGINS、DEFAULT_ALLOWED_HEADERS、DEFAULT_ALLOW_CREDENTIALS、DEFAULT_MAX_AGE:

這些屬性用于設(shè)置默認值,在Spring 5.0+版本中已廢棄,由CorsConfiguration.applyPermitDefaultValues()方法來完成其功能。

注解示例

1) 建Controller,用來演示@CrossOrigin的使用方法。

package com.arhorchin.securitit.webannotations;

import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestHeader;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * @author Securitit.
 * @note 演示@CrossOrigin注解使用方法.
 */
@Controller
@RequestMapping("/WebAnnotations")
public class CrossOriginController {

    /**
     * logger.
     */
    private Logger logger = LoggerFactory.getLogger(CrossOriginController.class);

    /**
     * 未使用@CrossOrigin.
     */
    @ResponseBody
    @RequestMapping(
            value = "/UnCrossOrigin.do",
            method = RequestMethod.GET)
    public String unCrossOrigin(@RequestHeader Map<String, String> requestHeaderMap) throws Exception {
        logger.info("@CrossOrigin use default value.");
        return "@CrossOrigin use default value.";
    }
    
    /**
     * 使用默認值的@CrossOrigin.
     */
    @ResponseBody
    @RequestMapping(
            value = "/CrossOrigin.do",
            method = RequestMethod.GET)
    @CrossOrigin
    public String crossOrigin(@RequestHeader Map<String, String> requestHeaderMap) throws Exception {
        logger.info("@CrossOrigin use default value.");
        return "@CrossOrigin use default value.";
    }
    
    /**
     * 指定origins屬性的@CrossOrigin.
     */
    @ResponseBody
    @RequestMapping(
            value = "/CrossOriginOrigins.do",
            method = RequestMethod.GET)
    @CrossOrigin(origins="http://localhost:9299")
    public String crossOriginOrigins(@RequestHeader Map<String, String> requestHeaderMap) throws Exception {
        logger.info("@CrossOrigin with origins.");
        return "@CrossOrigin with origins.";
    }
    
    /**
     * 指定origins、allowedHeaders、exposedHeaders、allowCredentials屬性的@CrossOrigin.
     */
    @ResponseBody
    @RequestMapping(
            value = "/CrossOriginOriginsAllowCredentials.do",
            method = RequestMethod.GET)
    @CrossOrigin(origins="http://localhost:9299", allowCredentials="true")
    public String crossOriginAllowedHeadersExposedHeadersAllowCredentials(@RequestHeader Map<String, String> requestHeaderMap) throws Exception {
        logger.info("@CrossOrigin with origins、allowedHeaders、exposedHeaders、allowCredentials.");
        return "@CrossOrigin with origins、allowedHeaders、exposedHeaders、allowCredentials.";
    }

}

2) 啟動服務(wù),使用端口9199。

3) 使用工具頁面,啟動服務(wù),使用端口9299。

① 訪問//localhost:9199/spring-annotations/WebAnnotations/UnCrossOrigin.do。

在這里插入圖片描述

② 訪問//localhost:9199/spring-annotations/WebAnnotations/CrossOrigin.do。

在這里插入圖片描述

③ 訪問//localhost:9199/spring-annotations/WebAnnotations/CrossOriginOrigins.do。

在這里插入圖片描述

總結(jié)

Spring簡化了@CrossOrigin開過過程中的配置,使得跨域請求處理更加便捷。

源碼解析基于spring-framework-5.0.5.RELEASE版本源碼。

若文中存在錯誤和不足,歡迎指正!

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

相關(guān)文章

  • 詳解Spring Security 簡單配置

    詳解Spring Security 簡單配置

    本篇文章主要介紹了詳解Spring Security 簡單配置,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • 詳解Java8如何使用Lambda表達式進行比較

    詳解Java8如何使用Lambda表達式進行比較

    Lambda表達式,也可稱為閉包,是java8的新特性,作用是取代大部分內(nèi)部類,優(yōu)化java代碼結(jié)構(gòu),讓代碼變得更加簡潔緊湊。本文將利用Lambda表達式進行排序比較,需要的可以參考一下
    2022-01-01
  • SpringBoot項目中報錯The field screenShot exceeds its maximum permitted size of 1048576 bytes.的問題及解決

    SpringBoot項目中報錯The field screenShot exceeds&n

    這篇文章主要介紹了SpringBoot項目中報錯The field screenShot exceeds its maximum permitted size of 1048576 bytes.的問題及解決,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • 對象轉(zhuǎn)Json字符串時如何忽略指定屬性

    對象轉(zhuǎn)Json字符串時如何忽略指定屬性

    這篇文章主要介紹了對象轉(zhuǎn)Json字符串時如何忽略指定屬性,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 如何在spring事務(wù)提交之后進行異步操作

    如何在spring事務(wù)提交之后進行異步操作

    這篇文章主要為大家介紹了如何在spring事務(wù)提交之后進行異步操作,這些異步操作必須得在該事務(wù)成功提交后才執(zhí)行,回滾則不執(zhí)行,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2023-09-09
  • java中的HashMap多層嵌套

    java中的HashMap多層嵌套

    這篇文章主要介紹了java中的HashMap多層嵌套問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • springboot結(jié)合JWT實現(xiàn)單點登錄的示例

    springboot結(jié)合JWT實現(xiàn)單點登錄的示例

    本文主要介紹了springboot結(jié)合JWT實現(xiàn)單點登錄的示例,包括生成Token、驗證Token及使用Redis存儲Token,具有一定的參考價值,感興趣的可以了解一下
    2025-01-01
  • 詳解springboot項目啟動時如何排除用不到的bean

    詳解springboot項目啟動時如何排除用不到的bean

    使用springboot開發(fā)項目,我們有時候會排除一些項目里面用不到的bean,不然的話項目啟動會報錯,這種情況通常是發(fā)生在什么場景里呢,以及如何解決呢,今天咱們就聊一聊
    2024-01-01
  • CountDownLatch源碼解析之a(chǎn)wait()

    CountDownLatch源碼解析之a(chǎn)wait()

    這篇文章主要為大家詳細解析了CountDownLatch源碼之a(chǎn)wait方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-04-04
  • JAVA輸出流與輸入流代碼實例

    JAVA輸出流與輸入流代碼實例

    這篇文章主要介紹了JAVA輸出流與輸入流代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論

南靖县| 芒康县| 瑞金市| 济源市| 固阳县| 无锡市| 鹤峰县| 博罗县| 义马市| 翁牛特旗| 杭锦后旗| 鄂州市| 鄂州市| 周至县| 高要市| 襄汾县| 青冈县| 丹江口市| 托克逊县| 墨脱县| 南昌县| 新晃| 栾川县| 河北省| 上思县| 阿尔山市| 麦盖提县| 民勤县| 凤阳县| 汝阳县| 兴国县| 巴彦淖尔市| 修武县| 保德县| 萝北县| 嘉定区| 农安县| 景宁| 肃南| 皋兰县| 桐梓县|