一、項目結構
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnaucjMhN2NlFWOxcDZ2MjNilzMkFWNlZjN0IWM5EjM0YGNfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpg)
與前面的示例相比,因為要連接配接db,是以多出了一個spring-database.xml用來定義資料庫連接配接,此外,為了示範登入使用者權限不足的場景,加了一個頁面403.jsp,用來統一顯示權限不足的提示資訊
二、資料庫表結構(oracle環境)
create-table
這裡建立了二張表,一張用來儲存使用者名/密碼,另一張用來儲存使用者所屬的權限角色,表名和字段名無所謂,可以随便改,但是使用者表中,必須要有"使用者名/密碼/帳号的有效狀态"這三列資訊,權限角色表必須要有“使用者名/權限角色”這二列資訊
再insert幾條測試資料
insert user/role data
這裡插入了二個使用者YJMYZZ/MIKE,而且MIKE屬于POWER組,YJMYZZ同時屬于POWER\ADMIN二個權限組
三、spring-security.xml
spring-security
注意第9行,這裡使用了一個el表達式,目的是/admin開頭的url,必須有ADMIN角色的登入使用者才可通路
第11行,表示如果登入使用者權限不夠,将跳轉到/403這個url
24,25這二行,指定了查詢使用者/角色的sql語句,注意:雖然前面提到了使用者/角色這二張表的表名/字段名可以随便寫,但是寫sql時,使用者名的别名必須是username,密碼列的别名必須是password,帳号有效狀态的别名必須是enabled,而權限角色列的别名必須是role
23行指定了db資料源,它的詳細定義在 spring-database.xml中,内容如下:
本文使用的是oracle資料庫,如果是其它資料庫,請自行調整上面的内容
四、Controller
HelloController
66-71行示範了如何在服務端判斷一個使用者是否已經登入
五、視圖頁面
hello.jsp
注意一下:14、27、35這三行,它們示範了如何在jsp端判斷使用者具有的角色權限、是否已登入等用法
403.jsp
admin.jsp
因為在xml中已經配置了/admin開頭的請求url,必須具有ADMIN角色權限,是以admin.jsp端反而不用任何額外的判斷了