天天看點

Spring Security筆記:使用資料庫進行使用者認證(form login using database)

一、項目結構

Spring Security筆記:使用資料庫進行使用者認證(form login using database)

與前面的示例相比,因為要連接配接db,是以多出了一個spring-database.xml用來定義資料庫連接配接,此外,為了示範登入使用者權限不足的場景,加了一個頁面403.jsp,用來統一顯示權限不足的提示資訊

二、資料庫表結構(oracle環境)

Spring Security筆記:使用資料庫進行使用者認證(form login using database)
Spring Security筆記:使用資料庫進行使用者認證(form login using database)

create-table

這裡建立了二張表,一張用來儲存使用者名/密碼,另一張用來儲存使用者所屬的權限角色,表名和字段名無所謂,可以随便改,但是使用者表中,必須要有"使用者名/密碼/帳号的有效狀态"這三列資訊,權限角色表必須要有“使用者名/權限角色”這二列資訊

再insert幾條測試資料

Spring Security筆記:使用資料庫進行使用者認證(form login using database)
Spring Security筆記:使用資料庫進行使用者認證(form login using database)

insert user/role data

這裡插入了二個使用者YJMYZZ/MIKE,而且MIKE屬于POWER組,YJMYZZ同時屬于POWER\ADMIN二個權限組

三、spring-security.xml

Spring Security筆記:使用資料庫進行使用者認證(form login using database)
Spring Security筆記:使用資料庫進行使用者認證(form login using database)

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 

Spring Security筆記:使用資料庫進行使用者認證(form login using database)
Spring Security筆記:使用資料庫進行使用者認證(form login using database)

HelloController

66-71行示範了如何在服務端判斷一個使用者是否已經登入

五、視圖頁面

hello.jsp

Spring Security筆記:使用資料庫進行使用者認證(form login using database)
Spring Security筆記:使用資料庫進行使用者認證(form login using database)

注意一下:14、27、35這三行,它們示範了如何在jsp端判斷使用者具有的角色權限、是否已登入等用法

403.jsp

Spring Security筆記:使用資料庫進行使用者認證(form login using database)
Spring Security筆記:使用資料庫進行使用者認證(form login using database)

admin.jsp

Spring Security筆記:使用資料庫進行使用者認證(form login using database)
Spring Security筆記:使用資料庫進行使用者認證(form login using database)

因為在xml中已經配置了/admin開頭的請求url,必須具有ADMIN角色權限,是以admin.jsp端反而不用任何額外的判斷了