1. 程式人生 > >SpringBootSecurity學習(11)網頁版登入之URL動態許可權

SpringBootSecurity學習(11)網頁版登入之URL動態許可權

動態許可權

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

建立表

前面的討論中,我們建立了使用者表,角色表和使用者角色中間表,下面來建立選單功能表,並把現在有的url連結新增進去:

然後建立角色選單中間表,加入角色與url之間的對應關係:

建立基礎類

首先去掉前面的方法級別許可權的註解,然後建立選單實體類:

建立查詢方法,根據url查詢次連結對應的所有角色名稱:

對應的sql語句如下:

路由動態獲取角色

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

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

最後將新建的ObjectPostProcessor類配置到許可權配置方法中:

路由決策管理

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

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

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

測試

這樣動態許可權url就配置好了,根據上面方法中的資料,可以登入檢視是否具有對應的url許可權,沒有配置的是否不具備許可權。

程式碼地址:https://gitee.com/blueses/spring-boot-security