天天看點

萬字搞定 Spring Security!

思維導圖如下:

萬字搞定 Spring Security!

rbac 全稱為基于角色的權限控制,本段将會從什麼是 rbac,模型分類,什麼是權限,使用者組的使用,執行個體分析等幾個方面闡述 rbac.

思維導圖

繪制思維導圖如下

萬字搞定 Spring Security!

什麼是 rbac

rbac 全稱為使用者角色權限控制,通過角色關聯使用者,角色關聯權限,這種方式,間階的賦予使用者的權限,如下圖所示

萬字搞定 Spring Security!

對于通常的系統而言,存在多個使用者具有相同的權限,在配置設定的時候,要為指定的使用者配置設定相關的權限,修改的時候也要依次的對這幾個使用者的權限進行修改,有了角色這個權限,在修改權限的時候,隻需要對角色進行修改,就可以實作相關的權限的修改。這樣做增加了效率,減少了權限漏洞的發生。

對于 rbac 模型來說,分為以下幾個模型 分别是 rbac0,rbac1,rbac2,rbac3,這四個模型,這段将會依次介紹這四個模型,其中最常用的模型有 rbac0.

rbac0 是最簡單的 rbac 模型,這裡面包含了兩種。

使用者和角色是多對一的關系,即一個使用者隻充當一種角色,一個角色可以有多個角色的擔當。

使用者和角色是多對多的關系,即,一個使用者可以同時充當多個角色,一個角色可以有多個使用者。

此系統功能單一,人員較少,這裡舉個栗子,張三既是行政,也負責财務,此時張三就有倆個權限,分别是行政權限,和财務權限兩個部分。

相對于 rbac0 模型來說,增加了子角色,引入了繼承的概念。

萬字搞定 Spring Security!

這裡 rbac2 模型,在 rbac0 模型的基礎上,增加了一些功能,以及限制

即,同一個使用者不能擁有兩個互斥的角色,舉個例子,在财務系統中,一個使用者不能擁有會計員和審計這兩種角色。

即,用一個角色,所擁有的成員是固定的,例如對于 ceo 這種角色,同一個角色,也隻能有一個使用者。

即,對于該角色來說,如果想要獲得更高的角色,需要先擷取低一級别的角色。舉個栗子,對于副總經理和經理這兩個權限來說,需要先有副總經理權限,才能擁有經理權限,其中副總經理權限是經理權限的先決條件。

即,一個使用者可以擁有兩個角色,但是這倆個角色不能同時使用,需要切換角色才能進入另外一個角色。舉個栗子,對于總經理和專員這兩個角色,系統隻能在一段時間,擁有其一個角色,不能同時對這兩種角色進行操作。

即,rbac1,rbac2,兩者模型全部累計,稱為統一模型。

萬字搞定 Spring Security!

權限是資源的集合,這裡的資源指的是軟體中的所有的内容,即,對頁面的操作權限,對頁面的通路權限,對資料的增删查改的權限。舉個栗子。對于下圖中的系統而言,

萬字搞定 Spring Security!

擁有,計劃管理,客戶管理,合同管理,出入庫通知單管理,糧食安全追溯,糧食統計查詢,裝置管理這幾個頁面,對這幾個頁面的通路,以及是否能夠通路到菜單,都屬于權限。

對于使用者組來說,是把衆多的使用者劃分為一組,進行批量授予角色,即,批量授予權限。舉個栗子,對于部門來說,一個部門擁有一萬多個員工,這些員工都擁有相同的角色,如果沒有使用者組,可能需要一個個的授予相關的角色,在擁有了使用者組以後,隻需要,把這些使用者全部劃分為一組,然後對該組設定授予角色,就等同于對這些使用者授予角色。

優點:減少工作量,便于了解,增加多級管理,等。

首先添加依賴

然後添加相關的通路接口

最後啟動項目,在日志中檢視相關的密碼

萬字搞定 Spring Security!

通路接口,可以看到相關的登入界面

萬字搞定 Spring Security!

輸入使用者名和相關的密碼

萬字搞定 Spring Security!

登入成功

在配置檔案中,書寫相關的登入和密碼

在登入頁面,輸入使用者名和密碼,即可正常登入

需要自定義類繼承 websecurityconfigureradapter 代碼如下

即,配置的使用者名為 admin,密碼為 123,角色為 admin

httpsecurity

這裡對一些方法進行攔截

即,這裡完成了對所有的方法通路的攔截。

這是一個小 demo,目的,登入以後傳回 jwt 生成的 token

添加 web 依賴

萬字搞定 Spring Security!

導入 jwt 和 security 依賴

建立 一個相關的 javabean

編寫工具類,用來生成 token,以及重新整理 token,以及驗證 token。

編寫 filter 用來檢測 jwt

在上方代碼中,編寫 userdetailsservice,類,實作其驗證過程

編寫登入業務的實作類 其 login 方法會傳回一個 jwtutils 的 token

運作,傳回結果為 token

萬字搞定 Spring Security!

這裡配置 springsecurity 之 json 登入

這裡需要重寫 usernamepasswordanthenticationfilter 類,以及配置 springsecurity

這樣就完成使用 json 登入 springsecurity

需要在 config 類中配置如下内容

即,使用此方法,對密碼進行加密, 在業務層的時候,使用此加密的方法

即,使用 bcryptpasswordencoder 對密碼進行加密,儲存資料庫

這裡使用資料庫認證 springsecurity

這裡設計資料表

萬字搞定 Spring Security!

這裡着重配置 springconfig。

着重講解了 rbac 的權限配置,以及簡單的使用 springsecurity,以及使用 springsecurity + jwt 完成前後端的分離,以及配置 json 登入,和密碼加密方式。

-end-

如果看到這裡,說明你喜歡這篇文章,請 轉發、點贊。同時 标星(置頂)本公衆号可以第一時間接受到博文推送。

萬字搞定 Spring Security!

最近整理一份面試資料《java技術棧學習手冊》,覆寫了java技術、面試題精選、spring全家桶、nginx、ssm、微服務、資料庫、資料結構、架構等等。

擷取方式:點“ 在看,關注公衆号 java後端 并回複 777 領取,更多内容陸續奉上。

喜歡文章,點個在看 

萬字搞定 Spring Security!