zuul security跨域Cors問題解決

2021-10-01 11:18:19 字數 2545 閱讀 7836

場景

在服務後台都會出現跨域cors問題,不過一般spring解決起來比較方便,在框架+框架的基礎上,問題就顯得特別明顯了,各種衝突,不了解原始碼的執行原理,解決起來也是有心無力。

這裡介紹的是zuul配置了跨域,在前端呼叫仍然會出現跨域的問題。

一般沒有許可權的介面加上cors配置就會通過跨域的問題。不過在服務間呼叫具有許可權的功能,莫名的報跨域問題。

post特殊請求

在解決問題時發現post請求也有點特殊,這裡也需要處理一下。

post請求分為簡單請求和複雜請求。

cors中,可以使用options方法發起乙個預檢請求,以檢測實際請求是否可以被伺服器所接受。預檢請求報文中的access-control-request-method首部字段告知伺服器實際請求所使用的http方法;access-control-request-headers首部字段告知伺服器實際請求所攜帶的自定義首部字段。伺服器基於從預檢請求獲得的資訊來判斷,是否接受接下來的實際請求。

以及options未攜帶任何許可權相關的內容,會被認證攔截,我們也得放開options型別請求

之前設定很簡單,習慣操作把之前的**複製了過來,第一次操作是建立了乙個corsfilterbean,但是簡單的請求確實通過了,不過許可權介面過不了,於是按照一些資料配置了下面的** 注入了filterregistrationbeanbean 還設定了 order 載入順序。

解決後無果 仍然和之前的效果一致。

/**

* 跨域配置 c - cross o - origin r - resource s - sharing

* * @author purgeyao

* @since 1.0

*/@configuration

//@order(ordered.highest_precedence)

public class corsconfig

}

在一些資料+原始碼的幫助下,嘗試了下面**:

這次實現了corsfilter類 載入了@order順序為(ordered.highest_precedence)最優先。

/**

* 解決 zuul+oauth2 跨域配置 c - cross o - origin r - resource s - sharing

* * @author purgeyao

* @since 1.0

*/@component

@order(ordered.highest_precedence)

public class ajaxcorsfilter extends corsfilter

private static urlbasedcorsconfigurationsource configurationsource()

}

哈哈哈,解決了,但是有沒有感覺到莫名其妙啊,經過了解

發現其實只是乙個載入順序的問題,我們上面注入的filterregistrationbean也可以使用的,只是在設定order的時候有點問題 需要設定比security優先順序高,改為ordered.highest_precedence發現成功可以通過跨域了。

/**

* 跨域配置 c - cross o - origin r - resource s - sharing

* * @author purgeyao

* @since 1.0

*/@configuration

//@order(ordered.highest_precedence)

public class corsconfig

}

解決解決。。。

有關 options(ndn

web docs) 介紹。

在傳送 post 請求 會發現在真正傳送之前會有乙個options請求。

options為攜帶任何有狀態的認證資訊,被許可權攔截下來異常,就沒有之後的真正請求了。

我們只需要吧options請求放開 返回200狀態即可。

有很多辦法做到,可以在zuul閘道器放過,也可以通過security新增 忽略攔截列表。

public class securityconfiguration extends websecurityconfigureradapter 

}

萬事大吉。

簡單的bug解決起來簡單點,不過遇到交集的bug,有心無力的感覺,莫名其妙的問題,需要耐心觀察原始碼執行原理。

js跨域 ajax跨域 跨域方式(前端)

跨域方式 cors 跨域資源共享 當使用xmlhttprequest傳送請求時,瀏覽器會自動加上乙個請求頭 origin,後端在接受到請求後確定響應後會在response headers中加入乙個屬性 access control allow origin,值就是發起請求的源位址 瀏覽器得到響應會進...

跨域與跨域訪問

跨域是指從乙個網域名稱的網頁去請求另乙個網域名稱的資源。比如從www.baidu.com 頁面去請求 www.google.com 的資源。跨域的嚴格一點的定義是 只要協議,網域名稱,埠有任何乙個的不同,就被當作是跨域 使用者訪問www.mybank.com 登陸並進行網銀操作,這時cookie啥的...

跨域與跨域訪問

跨域是指從乙個網域名稱的網頁去請求另乙個網域名稱的資源。比如從www.baidu.com 頁面去請求 www.google.com 的資源。跨域的嚴格一點的定義是 只要協議,網域名稱,埠有任何乙個的不同,就被當作是跨域 使用者訪問www.mybank.com 登陸並進行網銀操作,這時cookie啥的...