shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)
前言
shenyu以前叫soul網(wǎng)關(guān),我比較早關(guān)注它的,直到前不久看到它們創(chuàng)始人發(fā)的朋友圈,才知道現(xiàn)在已經(jīng)是apache頂級項目了,666
今天我點了下shenyu issue里頭逛逛,發(fā)現(xiàn)了一個老哥說能否做到對簽名插件的擴展,然后我就去看了shenyu里頭怎么實現(xiàn)驗簽的
加了他們創(chuàng)始人微信挺久了,也關(guān)注shenyu網(wǎng)關(guān)一段時間,因為本身在架構(gòu)組也會接觸網(wǎng)關(guān)內(nèi)容

shenyu網(wǎng)關(guān)
shenyu跟其他網(wǎng)關(guān)一樣,都是通過責任鏈的方式,這樣可以靈活進行擴展,也能做到每個處理類都難處理到。
我目前項目也有鑒權(quán)功能,也看看別人是怎么實現(xiàn)的
鑒權(quán)sign

首先肯定是找到對應(yīng)的模塊,shenyu-plugin-sign,SignPlugin 就是網(wǎng)關(guān)處理鏈條中的一環(huán)。

@Bean
public ShenyuPlugin signPlugin(final SignService signService) {
return new SignPlugin(signService);
}
就是你在項目里頭注入哪個SignService實現(xiàn)類,它會塞到這插件里頭來。

它會去判斷規(guī)則是否存在,什么規(guī)則?就是驗證簽名的時候那些配置,比如說多久超時,哪些url要通過sign驗簽。
但是這里也暴露了一個問題,過度依賴配置,如果做到高可用,可以做一層backup備份,如果沒有配置,或者配置讀不到的情況下,讀取上次配置的內(nèi)容。
DefaultSignService

這里有個比較好的東西,就是會將一些內(nèi)容封裝到上下文里頭,比如說a節(jié)點,處理了一個東西,還要set一個特殊的key到header里面,然后讓后面的去拿,這就很不方便了,如果是放在上下文的話,這就統(tǒng)一處理。
驗簽邏輯開始,首先是對時間做驗證,然后再是算法驗。

這里我要直呼一聲好家伙,exchange.getRequest().getQueryParams()直接拿到請求的參數(shù),如果你在服務(wù)里面實現(xiàn)那得累死你,區(qū)分post、get請求,需要特殊處理。
buildParamsMap(shenyuContext, requestBody)

這個map里頭有啥?加了時間戳、url、版本號,請求參數(shù)(去除sign)

DigestUtils.md5DigestAsHex(sign.getBytes()).toUpperCase()
這里是sign簽名算法
總結(jié)
到這里,shenyu的sign插件邏輯就差不多了,直呼好家伙,跟我現(xiàn)在項目里頭驗簽邏輯一毛一樣,只是簽名算法有所不同。但是這里面還是有些能優(yōu)化的點,比如說過度依賴shenyu現(xiàn)有的配置內(nèi)容,需要做到網(wǎng)關(guān)點高可用~
shenyu這里跟其他配置中心也有所不一樣,采用map來接收配置內(nèi)容,我們看nacos、apolla這些框架是刷新到eventment環(huán)境變量里頭去。
以上就是shenyu怎么處理sign鑒權(quán)前置到網(wǎng)關(guān)的詳細內(nèi)容,更多關(guān)于shenyu處理sign鑒權(quán)前置網(wǎng)關(guān)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
spring boot項目生成docker鏡像并完成容器部署的方法步驟
這篇文章主要介紹了spring boot項目生成docker鏡像并完成容器部署的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-10-10
為了多次讀取ServletInputStream引發(fā)的一系列問題
這篇文章主要介紹了為了多次讀取ServletInputStream引發(fā)的一系列問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10
springmvc+shiro+maven 實現(xiàn)登錄認證與權(quán)限授權(quán)管理
Shiro 是一個 Apache 下的一開源項目項目,旨在簡化身份驗證和授權(quán),下面通過實例代碼給大家分享springmvc+shiro+maven 實現(xiàn)登錄認證與權(quán)限授權(quán)管理,感興趣的朋友一起看看吧2017-09-09
springboot優(yōu)雅獲取前端參數(shù)的方法詳解
現(xiàn)在的項目基本上都是前后端分離的項目,如何打通前后端,接收前端傳過來的參數(shù)呢,這篇文章小編就來和大家詳細介紹一下springboot如何優(yōu)雅的獲取前端參數(shù)吧2024-03-03

