數據庫中定義用戶
前面我們定義用戶是在配置文件和代碼中定義死的默認用戶,一般在開發中是不會這樣做的,我們的用戶都是來自我們的用戶表,存儲在數據庫中。操作數據庫的技術有很多,spring security默認支持了一個JDBC的方式,下面用這個方式來從數據庫中查詢用戶。首先定義用戶表users:
enabled字段表示是否啟用,改為0表示不允許此用戶登錄。在表里面添加兩個用戶 :
注意密碼前面都加了{noop}是JDBC這種查詢方式默認的加密算法。實際上,這種方式還需要定義好幾個表,此處我們演示定義一個users用戶表就足夠了。
添加依賴
因為加入了數據庫,所以我們要添加兩個依賴:
數據源按照springboot的方式配置即可:
配置jdbc
刪除原來在配置類中定義的內存用戶,在配置類中增加一個Bean:
這樣使用jdbc從數據庫中查詢用戶就完全配置好了,啟動可以使用 admin/admin和user/123456兩個用戶登錄。
說明
這種jdbc的方式配置是很簡單的,但是有很多定義死的內容,比如表明和表中的三個字段,不過這些也是可以進行修改的。
上面的配置類中,使用了JdbcUserDetailsManager類,我們來進入這個類,看一下內容:
可以看到里面有很多默認的sql語句,這也解釋了為什么用戶表要叫user,為什么是上面定義的三個字段,增刪改查用戶都執行了哪些語句。而且默認的語句中不僅有users用戶表,還有 groups表,authorities權限表,等等一些其它的表,從這些結構中就能看出把整個權限系統的架構規划了出來。我們要修改默認的語句可以調用對應的set方法:
但是盡管所有的都可以配置,對於實際業務來說還是太死板了,尤其對於稍微大型的項目,對權限系統的個性化設計占很大成分,因此這種jdbc的方式適應性不是很大。后面會介紹更加實用的mybatis方式。