原始碼分析
waf 外掛程式總結
rewrite 外掛程式
原始碼分析
rewrite 外掛程式總結
waf 外掛程式是 soul 的前置外掛程式,主要用來攔截非法請求,或者異常請求,並且給與相關的拒絕策略,是 soul 閘道器的用來對流量實現防火牆功能的核心實現。
1)首先在 soul-admin 中開啟 waf 外掛程式
2)soul-bootstrap 的 pom 檔案中新增 waf 外掛程式starter 的依賴
>
>
org.dromaragroupid
>
>
soul-spring-boot-starter-plugin-wafartifactid
>
>
$version
>
dependency
>
3)然後在 soul-admin 的 waf 外掛程式中新增 過濾器 和 規則 對非法請求/異常請求進行拒絕
這裡將 url 為 /waf/test 的請求設定為拒絕,返回的狀態碼設定為 429:
請求 http://localhost:9195/waf/test 便會被直接拒絕:
waf 外掛程式關鍵原始碼解讀:protected mono
doexecute
(final serverwebexchange exchange,
final soulpluginchain chain,
final selectordata selector,
final ruledata rule)
// 如果是混合模式,會返回 403
// 拿到匹配的規則,如:
string handle = rule.
gethandle()
;// 將規則轉換成 wafhandle 型別,如:wafhandle(permission=reject, statuscode=426)
wafhandle wafhandle = gsonutils.
getinstance()
.fromjson
(handle, wafhandle.
class);
if(objects.
isnull
(wafhandle)
|| stringutils.
isblank
(wafhandle.
getpermission()
))", handle)
;return chain.
execute
(exchange);}
// 如果當前規則配置的是:拒絕訪問
if(wafenum.reject.
getname()
.equals
(wafhandle.
getpermission()
))// 當前請求被允許,則放行請求
return chain.
execute
(exchange)
;}
總的來說,waf 外掛程式就相當於乙個全域性的請求***,當請求屬於黑名單的時候,會直接拒絕請求,反之,則放心請求到下乙個外掛程式。比較靈活的一點是:請求的黑白名單,可以在 soul-admin 中通過選擇器和規則進行方便的配置。
rewrite 外掛程式用來對請求 uri 進行重新定義。當匹配到請求之後,如果設定了自定義路徑,那麼自定義的路徑就會覆蓋之前的請求路徑。
1)首先在 soul-admin 中開啟 rewrite 外掛程式
2)soul-bootstrap 的 pom 檔案中新增 rewrite 外掛程式starter 的依賴
>
>
org.dromaragroupid
>
>
soul-spring-boot-starter-plugin-rewriteartifactid
>
>
$version
>
dependency
>
3) 然後在 soul-admin 的 rewrite 外掛程式中新增 過濾器 和 規則 對請求 uri 進行重寫rewrite 外掛程式關鍵原始碼解讀:protected mono
doexecute
(final serverwebexchange exchange,
final soulpluginchain chain,
final selectordata selector,
final ruledata rule)
string handle = rule.
gethandle()
;// 轉換成 rewritehandle,如:rewritehandle(rewriteuri=/http/order/findbyid)
final rewritehandle rewritehandle = gsonutils.
getinstance()
.fromjson
(handle, rewritehandle.
class);
if(objects.
isnull
(rewritehandle)
|| stringutils.
isblank
(rewritehandle.
getrewriteuri()
))", handle)
;return chain.
execute
(exchange);}
// 設定 exchange 的 rewrite_uri 屬性,實現請求uri 的重寫
exchange.
getattributes()
.put
(constants.rewrite_uri, rewritehandle.
getrewriteuri()
);// 將新的 uri 放行到下乙個外掛程式
return chain.
execute
(exchange)
;}
總的來說,rewrite 外掛程式也相當於乙個全域性的請求***,當請求經過 rewrite 外掛程式時,如果匹配到了在 soul-admin 中配置的規則,那麼會通過設定 exchange 的 rewrite_uri 屬性,來實現對請求 uri 的重寫。 Soul閘道器原始碼探秘《九》 請求處理流程
前文探索外掛程式鏈時提到,當有接收到乙個請求的時候,會到達soulwebhandler的handle。本文會探索使用divideplugin外掛程式接收乙個請求到最終返回的全過程。在handle打上斷點,發起請求。可以通過左側呼叫棧來一點一點往前推處理的邏輯。首先是進入到defaultwebfilt...
Soul閘道器預設Divide外掛程式的使用
另外在divide外掛程式首頁我們可以看到,我們可以新增除了預設生成的規則之外的規則 最後實踐一下根據uri匹配的負載均衡,啟動多個客戶端程式,看看請求被 到那個服務上,可以看到不同負載策略的不同表現 同時我們在選擇器表單框內,可以看到隨著多個客戶端程式的使用,增加了配置的情況 另外,此處的weig...
Soul閘道器中的Http服務探活
服務探活機制是為了發現系統中上下游服務的的狀態。當有新的服務註冊時要通知其他系統,當有服務下線時也要告知其他系統。soul閘道器中有對http服務處理的探活,所有的服務物件儲存在soul admin的upstream map中,這裡面的服務物件有兩個 乙個來自於原有的資料庫,乙個來自於其他服務的註冊...