亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring中的@CrossOrigin注解的使用詳細(xì)解讀

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

@CrossOrigin注解的使用

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

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

注解解析

① value:

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

*表示允許來(lái)自任意請(qǐng)求源的請(qǐng)求。

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

默認(rèn)情況下,其值為*,允許來(lái)自任意請(qǐng)求源的請(qǐng)求。

注意:CORS處理時(shí),從Forwarded、X-Forwarded-Host、X-Forwarded-Port、X-Forwarded-Proto取請(qǐng)求源值。

② origins:

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

value與origins若同時(shí)存在,兩者的值需一致,否則啟動(dòng)時(shí)會(huì)出現(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:

指定允許實(shí)際請(qǐng)求標(biāo)頭列表,例如:allowedHeaders="Content-Type,Access-Token"。

*表示允許實(shí)際請(qǐng)求帶有任意標(biāo)頭。

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

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

默認(rèn)情況下,其值為*,允許實(shí)際請(qǐng)求帶有任意標(biāo)頭。

④ exposedHeaders:

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

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

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

?⑤ methods:

指定允許請(qǐng)求的HTTP方法。

默認(rèn)情況下,允許請(qǐng)求的HTTP方法與@RequestMapping相同。

⑥ allowCredentials:

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

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

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

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

⑦ maxAge:

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

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

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

其值為負(fù),表示未定義。

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

⑧ DEFAULT_ORIGINS、DEFAULT_ALLOWED_HEADERS、DEFAULT_ALLOW_CREDENTIALS、DEFAULT_MAX_AGE:

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

注解示例

1) 建Controller,用來(lái)演示@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.";
    }
    
    /**
     * 使用默認(rèn)值的@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) 啟動(dòng)服務(wù),使用端口9199。

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

① 訪問(wèn)//localhost:9199/spring-annotations/WebAnnotations/UnCrossOrigin.do。

在這里插入圖片描述

② 訪問(wèn)//localhost:9199/spring-annotations/WebAnnotations/CrossOrigin.do。

在這里插入圖片描述

③ 訪問(wèn)//localhost:9199/spring-annotations/WebAnnotations/CrossOriginOrigins.do。

在這里插入圖片描述

總結(jié)

Spring簡(jiǎn)化了@CrossOrigin開(kāi)過(guò)過(guò)程中的配置,使得跨域請(qǐng)求處理更加便捷。

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

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

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

相關(guān)文章

  • 在Java中int和byte[]的相互轉(zhuǎn)換

    在Java中int和byte[]的相互轉(zhuǎn)換

    這篇文章主要介紹了在Java中int和byte[]的相互轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下
    2016-11-11
  • java設(shè)計(jì)模式學(xué)習(xí)之代理模式

    java設(shè)計(jì)模式學(xué)習(xí)之代理模式

    這篇文章主要為大家詳細(xì)介紹了java設(shè)計(jì)模式學(xué)習(xí)之代理模式的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Java集合之LinkedHashSet類(lèi)詳解

    Java集合之LinkedHashSet類(lèi)詳解

    這篇文章主要介紹了Java集合之LinkedHashSet類(lèi)詳解,LinkedHashSet 是 Java 中的一個(gè)集合類(lèi),它是 HashSet 的子類(lèi),并實(shí)現(xiàn)了 Set 接口,與 HashSet 不同的是,LinkedHashSet 保留了元素插入的順序,并且具有 HashSet 的快速查找特性,需要的朋友可以參考下
    2023-09-09
  • Java常見(jiàn)異常及處理方式總結(jié)

    Java常見(jiàn)異常及處理方式總結(jié)

    今天給大家?guī)?lái)的是Java的相關(guān)知識(shí),文章圍繞著Java異常展開(kāi),文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • Spring Boot 使用Druid詳解

    Spring Boot 使用Druid詳解

    本篇文章主要介紹了Spring Boot 使用Druid配置詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • Java8-Stream流操作List去重問(wèn)題

    Java8-Stream流操作List去重問(wèn)題

    這篇文章主要介紹了Java8-Stream流操作List去重問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • spring?boot如何通過(guò)自定義注解和AOP攔截指定的請(qǐng)求

    spring?boot如何通過(guò)自定義注解和AOP攔截指定的請(qǐng)求

    這篇文章主要介紹了spring?boot通過(guò)自定義注解和AOP攔截指定的請(qǐng)求,本文主要通過(guò)切面類(lèi)和自定注解的方式,攔截指定的接口(代碼中已經(jīng)作了詳細(xì)的說(shuō)明),需要的朋友可以參考下
    2024-06-06
  • 解決idea找不到或無(wú)法加載主類(lèi)的錯(cuò)誤處理

    解決idea找不到或無(wú)法加載主類(lèi)的錯(cuò)誤處理

    這篇文章主要介紹了解決idea找不到或無(wú)法加載主類(lèi)的錯(cuò)誤處理,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-04-04
  • IDEA插件之mybatisx插件使用教程(超詳細(xì)!)

    IDEA插件之mybatisx插件使用教程(超詳細(xì)!)

    MybatisX 是一款基于IDEA的快速開(kāi)發(fā)插件,為效率而生,下面這篇文章主要給大家介紹了關(guān)于IDEA插件之mybatisx插件使用的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • Java 基礎(chǔ)語(yǔ)法中的邏輯控制

    Java 基礎(chǔ)語(yǔ)法中的邏輯控制

    這篇文章主要介紹了Java 基礎(chǔ)語(yǔ)法中的邏輯控制的相關(guān)資料,需要的朋友可以參考下面文章內(nèi)容
    2021-09-09

最新評(píng)論