詳解spring整合shiro許可權管理與資料庫設計
現在基本上所有的後臺系統都逃不過許可權管理這一塊,這算是一個剛需了。現在我們來整合shiro來達到顆粒化許可權管理,也就是從連線選單到頁面功能按鈕,都進行許可權都驗證,從前端按鈕的顯示隱藏,到後臺具體功能方法的許可權驗證。
首先要先設計好我們的資料庫,先來看一張比較粗糙的資料庫設計圖:
具體的資料庫設計程式碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
|
下面我們開始根據之前的框架整合shiro
首先在pom.xml新增shiro的支援,先在properties中宣告一下要倒入的版本:
1 2 3 4 |
|
然後在是dependency的新增:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
下面是shiro的配置跟spring配置放在同級目錄spring-shiro.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
|
上面的
/static/** = anon,/login.jsp = anon...這些等於anon的就是預設不做許可權驗證的,我們的登入,註冊,靜態資源等,不需要許可權驗證。
許可權快取的配置(如果不用快取的話,每次請求都要去訪問資料庫查詢許可權)ehcache-shiro.xml:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
|
自定義使用者過濾類SysUserFilter:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
許可權認證類ShiroSecurityRealm:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
|
在web.xml加入:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
在登入方法中加上許可權的登入(構造方法引數:登入賬號,登入密碼,記住我):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
|
資料庫也設計好啦,該整合的也整合了,怎麼來實現呢,這裡先說一點點,詳細的等下一篇說:
jsp頁面引入page指令:
在要做驗證的按鈕上加上shiro標籤的判斷:
1 2 3 4 5 |
|
${ROLE_KEY}:role:role_add的意思就是:
${ROLE_KEY}角色
role是指選單(頁面)
role_add指的功能
聯合起來就是,當前角色在role選單(頁面)中有沒有role_add新增的功能,如果有就會顯示,沒有就不顯示這個按鈕啦。
在後臺方法中驗證:
在對應的方法中加入程式碼:
1 2 |
|
如果沒有通過checkPermission,則會直接返回錯誤,不執行下面的程式碼啦。
實體Base類BaseEntity:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
|
使用者實體SysUser:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 |
|