SpringBootSecurity學習(11)網頁版登錄之URL動態權限


動態權限

前面討論用戶登錄認證的時候,根據用戶名查詢用戶會將用戶擁有的角色一起查詢出來,自動實現判斷當前登錄用戶擁有哪些角色。可以說用戶與角色之間的動態配置和判斷security做的非常不錯。不過在配置方法級別的權限的時候,使用注解雖然是一種比較優雅的方式,但是要求在開發的時候就知道當前url對應哪些角色,無法實現動態的配置,而實際的項目中,每個鏈接允許哪些角色訪問也不是一成不變的,因此下面我們來實現自己的路由判斷。

創建表

前面的討論中,我們創建了用戶表,角色表和用戶角色中間表,下面來創建菜單功能表,並把現在有的url鏈接添加進去:

file

然后創建角色菜單中間表,加入角色與url之間的對應關系:

file

創建基礎類

首先去掉前面的方法級別權限的注解,然后創建菜單實體類:

file

創建查詢方法,根據url查詢次鏈接對應的所有角色名稱:

file

對應的sql語句如下:

file

路由動態獲取角色

首先增加一個處理類,在收到訪問的時候,動態獲取當前url的角色:

file

新建一個ObjectPostProcessor類,將這個處理類配置到其中:

file

最后將新建的ObjectPostProcessor類配置到權限配置方法中:

file

路由決策管理

用戶與角色是多對多的關系,url與角色也是多對多的關系,這里的設定是,只要用戶與url對應的角色中有相同的存在,就表示用戶有訪問的權限。首先看一下對應判斷的處理類:

file

使用雙重for循環進行判斷,並進行結果投票。在注釋中可以看到,使用不同的方式會產生不同的策略。下一步在security配置類中配置路由策略方法:

file

除了UrlRoleAuthHandler類,其它決策類使用的都是security存在的類,最后在權限配置中配置決策管理:

file

測試

這樣動態權限url就配置好了,根據上面方法中的數據,可以登錄查看是否具有對應的url權限,沒有配置的是否不具備權限。

代碼地址:https://gitee.com/blueses/spring-boot-security 11


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM