欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot實現(xiàn)跨域的幾種常用方式總結(jié)

 更新時間:2023年09月24日 10:50:53   作者:fking86  
跨域是指一個域下的文檔或腳本試圖去請求另一個域下的資源,或者涉及到兩個不同域名的資源之間的交互,由于同源策略(Same Origin Policy)的限制,瀏覽器不允許跨域請求,本文小編給大家分享了SpringBoot實現(xiàn)跨域的幾種常用方式,需要的朋友可以參考下

一、什么是跨域

跨域是指一個域下的文檔或腳本試圖去請求另一個域下的資源,或者涉及到兩個不同域名的資源之間的交互。由于同源策略(Same Origin Policy)的限制,瀏覽器不允許跨域請求。同源策略規(guī)定,A網(wǎng)頁設(shè)置的Cookie、LocalStorage和IndexDB無法被同源以外的網(wǎng)頁讀取??缬蛘埱髸粸g覽器拒絕。舉個例子:- DOMAIN-A.com 和 DOMAIN-B.com 是兩個不同的域名,它們之間的請求就是跨域請求。- DOMAIN-A.com/dir1 和 DOMAIN-A.com/dir2 雖然路徑不同,但是域名相同,所以不是跨域。

二、跨域問題出現(xiàn)的原因

  1. 瀏覽器的同源策略(Same Origin Policy)限制了跨域請求。主要出于安全考慮,瀏覽器限制腳本只能讀取與之同源的資源。同源指的是協(xié)議、域名、端口都相同??缬蛘埱髸驗檫`反同源策略而被阻止。
  2. Cookie和本地存儲也遵循同源策略。A域名下的頁面無法讀取B域名下的Cookie、localStorage等。
  3. 跨域JavaScript請求會報錯。比如A頁面請求B頁面的JS文件,就會報錯。
  4. 跨域DOM無法訪問。A頁面的JS無法獲取B頁面的DOM節(jié)點。
  5. 跨域數(shù)據(jù)請求需要進行CORS預(yù)檢。瀏覽器會在正式通信之前,先進行一次HTTP查詢請求,詢問服務(wù)器是否允許跨源請求。
  6. iframe也受同源策略限制。A頁面的iframe嵌入B頁面,A頁面JS無法訪問iframe的DOM。
  7. 跨域圖片獲取限制。A頁面無法獲取B頁面img標(biāo)簽的src,會報錯。

三、常見的跨域請求方式

  1. JSONP:通過script標(biāo)簽加載JS文件來實現(xiàn)跨域通信。
  2. CORS:服務(wù)器端設(shè)置HTTP頭,允許指定的請求來源跨域訪問。
  3. postMessage:A域的window向B域的window發(fā)送消息,實現(xiàn)跨域通信。

四、SpringBoot實現(xiàn)跨域的幾種方式

1.@crossOrigin 注解我們可以在Controller的方法上直接使用@CrossOrigin注解,如:

@CrossOrigin(origins = "http://domain1.com")
@RestController
public class TestController {
    @GetMapping("/test")
    public String test() {
        return "hello";
    }
}

這種方式簡單適用,但是不能應(yīng)對所有的跨域請求,比較局限。

2.過濾器CorsFilter我們可以注冊CorsFilter跨域過濾器,如:

@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true);
        config.addAllowedOrigin("http://domain1.com");
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);
        return new CorsFilter(source);
    }
}

然后該過濾器會應(yīng)用到所有的請求上。這種方式配置更加靈活。

3.配置類WebMvcConfigurer我們可以在WebMvcConfigurer接口的addCorsMappings()方法中添加跨域配置,如:

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
            .allowedOrigins("http://domain1.com")
            .allowedMethods("GET", "POST", "PUT", "OPTIONS", "DELETE", "PATCH")
            .allowedHeaders("*")
            .allowCredentials(true);
    }
}

這也是一種比較常用的跨域解決方案。

到此這篇關(guān)于SpringBoot實現(xiàn)跨域的幾種常用方式總結(jié)的文章就介紹到這了,更多相關(guān)SpringBoot實現(xiàn)跨域內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA加密算法實密鑰一致協(xié)議代碼示例

    JAVA加密算法實密鑰一致協(xié)議代碼示例

    這篇文章主要介紹了JAVA加密算法實密鑰一致協(xié)議代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-10-10
  • ConcurrentHashMap是如何實現(xiàn)線程安全的你知道嗎

    ConcurrentHashMap是如何實現(xiàn)線程安全的你知道嗎

    這篇文章主要介紹了ConcurrentHashMap是如何實現(xiàn)線程安全的你知道嗎,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • 基于SpringBoot和Vue的動態(tài)語音播放實現(xiàn)

    基于SpringBoot和Vue的動態(tài)語音播放實現(xiàn)

    本文介紹如何使用SpringBoot和Vue實現(xiàn)音頻文件的動態(tài)播放,包括前端頁面設(shè)計、后端接口開發(fā)、音頻文件存儲和調(diào)用等方面。通過該實現(xiàn),用戶可以在網(wǎng)頁上直接播放音頻,增強用戶體驗,提高網(wǎng)站互動性
    2023-04-04
  • java高級用法之綁定CPU的線程Thread?Affinity簡介

    java高級用法之綁定CPU的線程Thread?Affinity簡介

    java線程thread affinity是用來將java代碼中的線程綁定到CPU特定的核上,用來提升程序運行的性能,這篇文章主要介紹了java高級用法之綁定CPU的線程thread affinity的相關(guān)知識,需要的朋友可以參考下
    2022-05-05
  • java中實現(xiàn)漢字按照拼音排序(示例代碼)

    java中實現(xiàn)漢字按照拼音排序(示例代碼)

    這篇文章主要是對java中將漢字按照拼音排序的實現(xiàn)代碼進行了詳細的分析介紹。需要的朋友可以過來參考下,希望對大家有所幫助
    2013-12-12
  • Java實現(xiàn)JWT登錄認證的示例代碼

    Java實現(xiàn)JWT登錄認證的示例代碼

    Java中我們可以使用諸如JJWT這樣的庫來生成和驗證JWT,本文主要介紹了Java實現(xiàn)JWT登錄認證的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • maven的pom.xml中profiles的作用詳解

    maven的pom.xml中profiles的作用詳解

    這篇文章主要介紹了maven的pom.xml中profiles的作用詳解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 詳解Java中static關(guān)鍵字的使用和原理

    詳解Java中static關(guān)鍵字的使用和原理

    static可以用來修飾的成員變量和成員方法,被修飾的成員是屬于類的,而不是單單是屬于某個對象的。本文就來詳細說說他的使用和原理,需要的可以參考一下
    2022-10-10
  • Java中的ClassLoader類加載器使用詳解

    Java中的ClassLoader類加載器使用詳解

    這篇文章主要介紹了Java中的ClassLoader類加載器使用詳解,ClassLoader用于將CLASS文件動態(tài)加載到JVM中去,是所有類加載器的基類,所有繼承自抽象的ClassLoader的加載器,都會優(yōu)先判斷是否被父類加載器加載過,防止多次加載,需要的朋友可以參考下
    2023-10-10
  • 關(guān)于spring.factories失效原因分析及解決

    關(guān)于spring.factories失效原因分析及解決

    這篇文章主要介紹了關(guān)于spring.factories失效原因分析及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論