如何使用Defender優雅的管理許可權?

2022-05-08 23:54:12 字數 2490 閱讀 6111

許可權管理已經不知不覺深入到了我們生活的每乙個角落,例如地鐵進站的閘機,高速公路上的過路費,停車場的槓桿等等等等。

作為一名開發人員,許可權二字對我們的映像更加深刻,無論任何系統,都多多少少與許可權管理會沾上關係!什麼?你的系統和許可權不沾邊......好吧,你的**拉取許可權總得有吧!如果還沒有的話,你登上掘金看到這篇文章並點了乙個贊這個過程就需要好多次許可權校驗。好了扯遠了,我們回歸正題,這裡使用一張圖來簡單展示web系統的許可權是什麼樣子:

看完之後,是不是感覺很簡單,不錯,許可權管理並不難,我們只需要將校驗這一環節進行開發即可,實現方式也有很多種:

我們可以將許可權校驗的整個過程元件化,例如元件名為authcomponent,之後再所有需要許可權校驗的介面對應的方法的開頭,呼叫authcomponentverify方法進行校驗,根據結果做不同的業務處理!

在方案一的基礎上我們稍加改造,例如使用aop對需要校驗的介面做個切面,在方法執行前我們使用authcomponent校驗一下即可,這樣我們的**就更方便維護了!

我們將方案一和方案二結合一下,取一靈活,取二通用,我們自定義乙個名為@auth的註解,並且它需要傳乙個引數,我們這裡直徑定義為列舉類level,簡單結構如下:

public enum level 

複製**

之後我們定義乙個註解切面,切向攜帶@auth的方法,在方法執行前根據value值的內容,也就是level的值去做不同的許可權管理即可。

這是最簡單的方法,例如優秀的開源shirospring-security等都可以滿足我們的需求,唯一的區別是框架的輕重及使用方式!

想必很多同學都在使用第四種方案,也有不少的小夥伴在使用方案三,對於缺點明顯的方案一和二,使用的應該很少。

如果我們的服務並不需要那麼重的許可權管理框架去解決許可權問題,又不想不優雅的自定義註解去實現時,我們該怎麼辦呢?

不妨試試 defender

defender是一款全面擁抱spring-boot的輕量級,高靈活,高可用的許可權框架。如果日常中我們需要更加優雅的對服務增加許可權管理,那麼defender正合適!

它可以免除我們重複編寫自定義註解和切面,只需要呼叫簡單的api即可靈活的指定不同模式的防禦網路。

defender提供小巧靈活的api去制定你想要的許可權過濾網路,提供很多種防禦模式,我們可以通過呼叫簡單的api是使用構建不同模式的校驗器,從而迅速完成許可權的管理:

@configuration

@enabledefender("* org.nico.trap.controller..*.*(..)")

public class defendertestconfig ))

.ready(); }}

複製**

上述**的作用是對請求符合post型別且uri字首為/user/的所有介面做了許可權管理。

另外,我們可以使用lambda簡單完成許可權校驗邏輯,又或者使用匿名類實現複雜校驗邏輯:

guarder.builder(guardertype.annotation)

.pattern("org.nico.trap.controller")

.preventer(new abstractpreventer()

}}else

}return result.pass();}})

複製**

其中guardertype.uriguardertype.annotation分別代表uri ant匹配模式和註解模式,後者是方案三的實現,defender提供簡單優雅的api將各種模式的許可權校驗方式集合在一起。

相比shirospring-securitydefender顯得更加輕便靈活,因為它並沒有提供一系列許可權更具體的管理實現,而是將校驗的實現開放乙個介面面向開發者,總體**大小不超過21k,顯然對於輕量級的許可權管理,defender更加適合!

defender傳送門

官方也提供有簡單的使用文件

中文文件

english document

如果您感覺不錯,也想參與貢獻

如何貢獻

如何優雅的使用「看板」?

你需要通過看板達到什麼目的 看板三原則 1.使工作視覺化,給每人乙個專案目前的big picture。2.減少並行工作。乙個user story的生命週期被切分成較小的塊,每個人應該keep在其中一塊。3.優化工作流程。在實踐中不斷迭代看板的流程,增減某些階段,或調整從乙個階段跳轉到下乙個階段的邊界...

如何優雅的使用rem

移動端css做布局的時候,如何選擇px em rem這幾個單位呢?很多初做移動端的童鞋們,不知道如何用px em 還是用rem做移動端的布局,那就舉例說一下 如果使用 作為單位的話,在iphone4上多少會有些布局錯位,那用rem就解決了這個難題。document.documentelement.s...

如何使用div優雅的布局

就是跨行和跨列嘛 如果 做就easy 但是,div是塊級標籤,每個div會獨佔一行 下面的兩個div會到一行 style float left div1div style float left div2div div 但是這個有侷限性的 要調寬高度 雖然使用flot left 向某個方向飄簡單許多,...