成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Spring Security 將用戶數據存入數據庫

瀏覽:2日期:2023-08-16 18:11:55

Spring Security 介紹到現在,我們還沒連上數據庫呢。

真正的項目中,大部分情況下,我們都是自己設計權限數據庫,例如微人事(https://github.com/lenve/vhr)項目那樣。

不過,Spring Security 也給我們提供了一個它自己設計好的權限數據庫,這里我們先來看看這是怎么回事!先來學這個簡單的,然后我們再去看復雜的。

1.UserDetailService

Spring Security 支持多種不同的數據源,這些不同的數據源最終都將被封裝成 UserDetailsService 的實例,在微人事(https://github.com/lenve/vhr)項目中,我們是自己來創建一個類實現 UserDetailsService 接口,除了自己封裝,我們也可以使用系統默認提供的 UserDetailsService 實例,例如上篇文章和大家介紹的 InMemoryUserDetailsManager 。

我們來看下 UserDetailsService 都有哪些實現類:

Spring Security 將用戶數據存入數據庫

可以看到,在幾個能直接使用的實現類中,除了 InMemoryUserDetailsManager 之外,還有一個 JdbcUserDetailsManager,使用 JdbcUserDetailsManager 可以讓我們通過 JDBC 的方式將數據庫和 Spring Security 連接起來。

2.JdbcUserDetailsManager

JdbcUserDetailsManager 自己提供了一個數據庫模型,這個數據庫模型保存在如下位置:

org/springframework/security/core/userdetails/jdbc/users.ddl

這里存儲的腳本內容如下:

create table users(username varchar_ignorecase(50) not null primary key,password varchar_ignorecase(500) not null,enabled boolean not null);create table authorities (username varchar_ignorecase(50) not null,authority varchar_ignorecase(50) not null,constraint fk_authorities_users foreign key(username) references users(username));create unique index ix_auth_username on authorities (username,authority);

可以看到,腳本中有一種數據類型 varchar_ignorecase,這個其實是針對 HSQLDB 數據庫創建的,而我們使用的 MySQL 并不支持這種數據類型,所以這里需要大家手動調整一下數據類型,將 varchar_ignorecase 改為 varchar 即可。

修改完成后,創建數據庫,執行完成后的腳本。

執行完 SQL 腳本后,我們可以看到一共創建了兩張表:users 和 authorities。

users 表中保存用戶的基本信息,包括用戶名、用戶密碼以及賬戶是否可用。 authorities 中保存了用戶的角色。 authorities 和 users 通過 username 關聯起來。

配置完成后,接下來,我們將上篇文章中通過 InMemoryUserDetailsManager 提供的用戶數據用 JdbcUserDetailsManager 代替掉,如下:

@AutowiredDataSource dataSource;@Override@Beanprotected UserDetailsService userDetailsService() { JdbcUserDetailsManager manager = new JdbcUserDetailsManager(); manager.setDataSource(dataSource); if (!manager.userExists('javaboy')) { manager.createUser(User.withUsername('javaboy').password('123').roles('admin').build()); } if (!manager.userExists('江南一點雨')) { manager.createUser(User.withUsername('江南一點雨').password('123').roles('user').build()); } return manager;}

這段配置的含義如下:

首先構建一個 JdbcUserDetailsManager 實例。 給 JdbcUserDetailsManager 實例添加一個 DataSource 對象。 調用 userExists 方法判斷用戶是否存在,如果不存在,就創建一個新的用戶出來(因為每次項目啟動時這段代碼都會執行,所以加一個判斷,避免重復創建用戶)。 用戶的創建方法和我們之前 InMemoryUserDetailsManager 中的創建方法基本一致。

這里的 createUser 或者 userExists 方法其實都是調用寫好的 SQL 去判斷的,我們從它的源碼里就能看出來(部分):

public class JdbcUserDetailsManager extends JdbcDaoImpl implements UserDetailsManager, GroupManager { public static final String DEF_USER_EXISTS_SQL = 'select username from users where username = ?'; private String userExistsSql = DEF_USER_EXISTS_SQL; public boolean userExists(String username) { List<String> users = getJdbcTemplate().queryForList(userExistsSql, new String[] { username }, String.class); if (users.size() > 1) { throw new IncorrectResultSizeDataAccessException( 'More than one user found with name ’' + username + '’', 1); } return users.size() == 1; }}

從這段源碼中就可以看出來,userExists 方法的執行邏輯其實就是調用 JdbcTemplate 來執行預定義好的 SQL 腳本,進而判斷出用戶是否存在,其他的判斷方法都是類似,我就不再贅述。

3.數據庫支持

通過前面的代碼,大家看到這里需要數據庫支持,所以我們在項目中添加如下兩個依賴:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency><dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId></dependency>

然后再在 application.properties 中配置一下數據庫連接:

spring.datasource.username=rootspring.datasource.password=123spring.datasource.url=jdbc:mysql:///security?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai

配置完成后,就可以啟動項目。

項目啟動成功后,我們就可以看到數據庫中自動添加了兩個用戶進來,并且用戶都配置了角色。如下圖:

Spring Security 將用戶數據存入數據庫

Spring Security 將用戶數據存入數據庫

4.測試

接下來我們就可以進行測試了。

我們首先以 江南一點雨的身份進行登錄:

Spring Security 將用戶數據存入數據庫

登錄成功后,分別訪問 /hello,/admin/hello 以及 /user/hello 三個接口,其中:

/hello 因為登錄后就可以訪問,這個接口訪問成功。/admin/hello 需要 admin 身份,所以訪問失敗。/user/hello 需要 user 身份,所以訪問成功。具體測試效果小伙伴們可以參考松哥的視頻,我就不截圖了。

在測試的過程中,如果在數據庫中將用戶的 enabled 屬性設置為 false,表示禁用該賬戶,此時再使用該賬戶登錄就會登錄失敗。

按照相同的方式,大家也可以測試 javaboy 用戶。

好了,今天就和小伙伴們說這么多.

以上就是Spring Security 將用戶數據存入數據庫的詳細內容,更多關于Spring Security 數據存入數據庫的資料請關注好吧啦網其它相關文章!

標簽: Spring
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
91麻豆免费视频| 精品第一国产综合精品aⅴ| 久久电影网电视剧免费观看| 精品影院一区二区久久久| 99视频一区二区三区| 国产精品hd| 久久久久se| 欧美电影免费观看高清完整版在| 中文字幕av在线一区二区三区| 亚洲一二三四区| 中文字幕五月欧美| 首页国产丝袜综合| 高清不卡一区二区| 激情欧美亚洲| 欧美日韩日日骚| 国产亚洲精品aa午夜观看| 亚洲午夜影视影院在线观看| 亚洲精品在线观看免费| 欧美日本高清视频在线观看| 国产精品久久影院| 另类小说视频一区二区| 久久国产一区二区| 久久久噜噜噜久噜久久综合| 日韩激情一区二区| 久久国产精品亚洲77777| 亚洲综合丁香婷婷六月香| 一本不卡影院| 日韩精品一区二区三区蜜臀 | 久久国产精品区| 欧美日韩一区二区电影| 精品一区二区三区日韩| 日韩一区二区精品葵司在线 | 激情小说亚洲一区| 欧美午夜欧美| 中文字幕一区二区三区在线观看 | 中文字幕中文字幕一区| 在线观看亚洲| 日韩网站在线看片你懂的| 懂色av噜噜一区二区三区av| 精品日产卡一卡二卡麻豆| 日本不卡一区二区三区 | 国产精品成人网| 亚洲精品在线观看免费| 亚洲一级二级在线| 在线观看成人小视频| 成人免费在线视频观看| 国产情侣一区| 日韩av高清在线观看| 欧美日韩www| 成人午夜激情在线| 欧美怡红院视频| 一区二区三区四区不卡在线| 99精品视频在线播放观看| 欧美性大战久久久久久久| 国产精品66部| 久久久久国产精品一区三寸| 日韩国产欧美一区二区三区| 欧美色综合网站| 白白色亚洲国产精品| 国产精品久久三| 国产模特精品视频久久久久| 国产欧美日韩在线| 成人免费视频caoporn| 国产日韩影视精品| 亚洲三级网站| 久久久精品黄色| 亚洲福利av| 免费美女久久99| 精品国产一区二区三区四区四| 欧美特黄一区| 视频一区二区三区中文字幕| 91精品在线麻豆| 日本成人在线一区| 欧美一区二区三区影视| 麻豆免费精品视频| 久久久久国产一区二区| 狠狠色丁香婷婷综合| 国产亚洲制服色| 在线视频一区观看| 久久国产剧场电影| wwwwxxxxx欧美| 国产高清成人在线| 宅男在线国产精品| 欧美视频不卡| 免费观看日韩av| 国产女人aaa级久久久级| 色视频成人在线观看免| 亚洲制服丝袜在线| 日韩午夜av一区| 99在线|亚洲一区二区| 国产在线精品不卡| 欧美日本视频在线| 欧美连裤袜在线视频| 久久久电影一区二区三区| 国产伦精品一区| 国产成人av一区二区三区在线观看| 国产日韩欧美a| 久久青青草综合| 不卡一区二区中文字幕| 精品国产乱码久久久久久免费| 亚洲精品三级| 国产一区二区毛片| 国产精品成人一区二区三区夜夜夜| 欧美综合天天夜夜久久| 欧美福利电影在线观看| 国产欧美日韩在线视频| 91黄视频在线| 老司机免费视频一区二区三区| 久久精品日产第一区二区三区高清版| 久久狠狠婷婷| 欧美1区视频| 毛片一区二区三区| 国产精品全国免费观看高清| 激情综合自拍| 国产在线精品免费av| 一区二区在线观看不卡| 国产精品一区亚洲| 国产成人免费视频一区| 亚洲精品成人悠悠色影视| 在线观看91精品国产麻豆| 成人小视频在线| 亚洲va欧美va人人爽午夜| 欧美亚洲一区二区三区四区| 欧美日韩专区| 国产精品 日产精品 欧美精品| 亚洲综合色噜噜狠狠| 久久久久亚洲蜜桃| 欧美三级视频在线| 亚洲一区三区电影在线观看| 不卡av在线免费观看| 男人的j进女人的j一区| 日韩毛片视频在线看| 国产精品久久久一区二区三区| 日韩1区2区3区| 亚洲三级小视频| 久久亚洲精精品中文字幕早川悠里| 色爱区综合激月婷婷| 亚洲高清激情| 91蜜桃在线免费视频| 国产精品 日产精品 欧美精品| 午夜久久久影院| 欧美一级国产精品| 久久久久久9| 亚洲国产精品第一区二区三区| 成人蜜臀av电影| 国产自产高清不卡| 爽好久久久欧美精品| 亚洲欧洲精品天堂一级| 精品乱码亚洲一区二区不卡| 欧美视频一区在线观看| 国产一区二区三区奇米久涩| 午夜久久资源| 99精品热视频| 国产不卡一区视频| 国内不卡的二区三区中文字幕| 亚洲bdsm女犯bdsm网站| 国产精品第四页| 久久精品一区二区三区不卡| 欧美一级爆毛片| 欧美精品久久99| 欧美日韩国产综合一区二区三区| 噜噜噜躁狠狠躁狠狠精品视频| 99在线精品免费视频九九视| 精品不卡视频| 欧美日韩精品免费观看 | 亚洲精品一区二区在线观看| 日韩一区二区视频| 欧美蜜桃一区二区三区| 欧美丝袜丝交足nylons图片| 一本大道久久a久久精二百| 久久国产精品99国产| 亚洲一区二区三区高清不卡| 日韩午夜在线| 亚洲精品国产系列| 激情久久综合| 一区二区在线视频观看| 欧美三级不卡| 欧美日韩在线高清| 午夜久久一区| 国产在线一区二区三区四区| 午夜精品久久久久| 亚洲电影一区二区三区| 亚洲一卡二卡三卡四卡| 亚洲午夜精品一区二区三区他趣| 一区二区三区在线播放| 一区二区三区久久| 亚洲成人资源在线| 视频一区二区三区在线| 日韩黄色免费网站| 视频在线观看一区| 青娱乐精品在线视频| 男人的j进女人的j一区| 久久爱www久久做| 麻豆国产欧美一区二区三区| 另类小说综合欧美亚洲| 国内精品写真在线观看| 国产宾馆实践打屁股91| 不卡的电视剧免费网站有什么| 欧美激情综合| 亚洲青涩在线|