Soul 學習筆記 使用 waf 外掛程式(十九)

2021-10-19 05:31:51 字數 2573 閱讀 8882

登入 soul-admin,開啟 waf 外掛程式。

官網上的這兩句很重要,waf 外掛程式原始碼的實現也是根據這兩句話來的。

一開始我選的 black 模式,配置如下。

接下來看下原始碼是怎麼實現的。

waf 外掛程式是前置外掛程式,也就是在請求真正 url 之前進行的,在外掛程式鏈上第三個執行的。執行 waf 外掛程式時,abstractsoulplugin 會匹配選擇器和規則,匹配成功後,在 wafplugin 會執行 doexecute 方法。

但 waf 外掛程式比較特殊一點是,其他外掛程式規則匹配不成功,一般就是走下乙個外掛程式了,abstractsoulplugin 的 handleselectorisnull,handleruleisnull 的**都是這麼寫的

//執行下乙個外掛程式

protected mono

handleselectorisnull

(final string pluginname,

final serverwebexchange exchange,

final soulpluginchain chain)

protected mono

handleruleisnull

(final string pluginname,

final serverwebexchange exchange,

final soulpluginchain chain)

但 wafplugin 重寫了 handleselectorisnull 和 handleruleisnull 方法,即使匹配不到選擇器和規則,只要你 waf 外掛程式開啟了,也會走到 wafplugin 的 doexecute 方法。

@override

protected mono

handleselectorisnull

(final string pluginname,

final serverwebexchange exchange,

final soulpluginchain chain)

@override

protected mono

handleruleisnull

(final string pluginname,

final serverwebexchange exchange,

final soulpluginchain chain)

waf 外掛程式的 doexecute 方法

protected mono

doexecute

(final serverwebexchange exchange,

final soulpluginchain chain,

final selectordata selector,

final ruledata rule)

//如果是 mixed,匹配不到就是 forbidden

//我們在規則配置的是 reject 時,這裡就按照我們配置的錯誤碼直接返回 response

if(wafenum.reject.

getname()

.equals

(wafhandle.

getpermission()

))//規則配置的是 allow 的話,直接走下乙個外掛程式了,可見 allow 時,配置的狀態碼也沒啥用。

return chain.

execute

(exchange)

;}

利用閘道器的這個 waf 外掛程式,我們就可以對那些非法的請求設定攔截策略。

Soul 學習筆記 外掛程式流程分析(十三)

springcloud divide 外掛程式跑通後,今天再 debug下 詳細的流程。這裡可以看到 springcloud 外掛程式,divide 外掛程式都是在 webclientplugin 外掛程式之後執行的。首先來看下外掛程式的繼承結構,soulplugin 介面定義了這幾個方法,而每個外...

Soul閘道器預設Divide外掛程式的使用

另外在divide外掛程式首頁我們可以看到,我們可以新增除了預設生成的規則之外的規則 最後實踐一下根據uri匹配的負載均衡,啟動多個客戶端程式,看看請求被 到那個服務上,可以看到不同負載策略的不同表現 同時我們在選擇器表單框內,可以看到隨著多個客戶端程式的使用,增加了配置的情況 另外,此處的weig...

soul閘道器學習sofa 外掛程式體驗(下)

首先回憶下程式沒有進入sofaplugin的可能原因 外掛程式狀態沒有開啟直接沒有執行直接 首先確認了狀態已經開啟,debug發現我的外掛程式鏈裡面並沒有sofa外掛程式 懷疑沒有初始化sofaplugin 再次看了波官網檢查了下閘道器日誌 發先輸出日誌裡面sofa外掛程式沒有被載入 找到原因 在閘...