登入 soul-admin,開啟 waf 外掛程式。
官網上的這兩句很重要,waf 外掛程式原始碼的實現也是根據這兩句話來的。
一開始我選的 black 模式,配置如下。
接下來看下原始碼是怎麼實現的。
waf 外掛程式是前置外掛程式,也就是在請求真正 url 之前進行的,在外掛程式鏈上第三個執行的。執行 waf 外掛程式時,abstractsoulplugin 會匹配選擇器和規則,匹配成功後,在 wafplugin 會執行 doexecute 方法。
但 waf 外掛程式比較特殊一點是,其他外掛程式規則匹配不成功,一般就是走下乙個外掛程式了,abstractsoulplugin 的 handleselectorisnull,handleruleisnull 的**都是這麼寫的
但 wafplugin 重寫了 handleselectorisnull 和 handleruleisnull 方法,即使匹配不到選擇器和規則,只要你 waf 外掛程式開啟了,也會走到 wafplugin 的 doexecute 方法。//執行下乙個外掛程式
protected mono
handleselectorisnull
(final string pluginname,
final serverwebexchange exchange,
final soulpluginchain chain)
protected mono
handleruleisnull
(final string pluginname,
final serverwebexchange exchange,
final soulpluginchain chain)
waf 外掛程式的 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 外掛程式,我們就可以對那些非法的請求設定攔截策略。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)
;}
Soul 學習筆記 外掛程式流程分析(十三)
springcloud divide 外掛程式跑通後,今天再 debug下 詳細的流程。這裡可以看到 springcloud 外掛程式,divide 外掛程式都是在 webclientplugin 外掛程式之後執行的。首先來看下外掛程式的繼承結構,soulplugin 介面定義了這幾個方法,而每個外...
Soul閘道器預設Divide外掛程式的使用
另外在divide外掛程式首頁我們可以看到,我們可以新增除了預設生成的規則之外的規則 最後實踐一下根據uri匹配的負載均衡,啟動多個客戶端程式,看看請求被 到那個服務上,可以看到不同負載策略的不同表現 同時我們在選擇器表單框內,可以看到隨著多個客戶端程式的使用,增加了配置的情況 另外,此處的weig...
soul閘道器學習sofa 外掛程式體驗(下)
首先回憶下程式沒有進入sofaplugin的可能原因 外掛程式狀態沒有開啟直接沒有執行直接 首先確認了狀態已經開啟,debug發現我的外掛程式鏈裡面並沒有sofa外掛程式 懷疑沒有初始化sofaplugin 再次看了波官網檢查了下閘道器日誌 發先輸出日誌裡面sofa外掛程式沒有被載入 找到原因 在閘...