SpringBootSecurity學習(08)網頁版登錄整合MyBatis


創建數據庫

前面介紹了springboot-security整合jdbc從數據庫中查詢用戶的方式,適用性有限,下面介紹最常用的整合MyBatis,這種在開發和生產環境中是最常用,也是最實用的。首先需要創建數據庫表,我們來創建三張表,分別是用戶表,角色表,還有用戶角色表,首先看用戶表:

file

只有三個字段,具體業務中需要幾個字段完全由我們自己設計。密碼是admin,是加密的,后面的配置中會看到加密方式,與前面介紹的在內存中配置默認用戶的方式類似。下面看角色表:

file

注意每個角色名字的前面都加了一個ROLE_前綴,最后來看用戶角色表:

file

我們給用戶只分配了一個角色。

創建實體類

我們從基本做起,來創建實體類,首先創建角色實體類 SysRole,

file

除了基本的id和role字段,SysRole還實現了GrantedAuthority接口,實現了getAuthority方法,這個方法返回的就是角色的名字,后面會看到專門實現這個接口的好處。下面來看用戶實體類 SysUser:

file

用戶名最好是username,密碼最好是password,這樣命名是security默認支持的命名。這個是原生的用戶實體類,除了id和用戶名密碼,加入了一個角色列表屬性,用以返回當前用戶擁有哪些角色,不過為了配合security的使用,最好給用戶實體類實現一個接口UserDetails:

file

然后實現接口的下面幾個方法:

file

其中比較重要的是最后一個獲取角色列表的方法,這是security默認的方法。由於我們角色實體類實現了GrantedAuthority接口,所以這里可以直接返回上面定義的角色列表。還有一些其它的屬性都是security默認設計的用戶屬性,從字面意思可以看出是判斷超時,鎖定,能否登陸之類的,如果想用可以定義對應的字段,如果不想用直接返回true即可。

創建mapper

在springboot中整合mybatis就不再介紹了。下一步創建mapper接口,內容很簡單,就是根據用戶名查詢用戶:

file

來看sql語句,我們要一步到位,把用戶和用戶擁有的角色都查出來,這里使用一個一對多查詢:

file

security配置類

配置類中把前面的jdbc配置可以刪除了,我們來重寫兩個方法,配置用戶名密碼的驗證和密碼的加密:

file

這里我們查詢到用戶的時候直接返回的用戶,是因為用戶類實現了對應的接口,所以操作很方便,而且返回的內容中包含了角色信息。下面在auth中配置了登錄驗證方式和密碼加密方式。

測試

上面的內容以及配置完了,我們重啟項目就可以使用admin/admin登錄:

file

file

訪問/two和/three頁面:

file

可以看到以非常個性化的自定義方式完成了用戶的認證和授權。來查看當前用戶信息:

file

在實際的開發中,用戶表肯定會有更加豐富的字段,使用用戶類實現UserDetails接口的形式能更好的獲取用戶信息。

注意,新增用戶的時候,密碼要使用 new BCryptPasswordEncoder().encode("admin") 的方式加密,新增角色的時候,前面要加上ROLE_前綴,這是默認的規則。

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


免責聲明!

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



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