ApiBoot Security
內(nèi)部提供了兩種方式進(jìn)行讀取需要認(rèn)證的用戶信息刃唤,在之前的文章中講到過ApiBoot Security
使用內(nèi)存方式(memory)
不寫一行代碼就可以實(shí)現(xiàn)用戶的認(rèn)證并獲取AccessToken
赎线,那我們使用JDBC
方式是不是也是這么的簡(jiǎn)單呢通孽?
免費(fèi)教程專題
恒宇少年在博客整理三套免費(fèi)學(xué)習(xí)教程專題
降狠,由于文章偏多
特意添加了閱讀指南
衰粹,新文章以及之前的文章都會(huì)在專題內(nèi)陸續(xù)填充
愈腾,希望可以幫助大家解惑更多知識(shí)點(diǎn)。
如果你還對(duì)ApiBoot
不了解堕虹,可以通過以下的途徑來獲取幫助卧晓。
ApiBoot Security的認(rèn)證方式
有一些同學(xué)可能對(duì)ApiBoot Security
的兩種認(rèn)證方式還不太了解,下面介紹下這兩種認(rèn)證方式的區(qū)別赴捞。
內(nèi)存方式
內(nèi)存方式(memory)
是將用戶信息(用戶名逼裆、密碼、角色列表)在application.yml
文件內(nèi)配置赦政,可配置多個(gè)用戶胜宇,項(xiàng)目啟動(dòng)后將用戶信息加載到內(nèi)存中,用于獲取AccessToken
時(shí)的認(rèn)證恢着。
數(shù)據(jù)庫方式
數(shù)據(jù)庫方式(jdbc)
是將用戶信息保存到數(shù)據(jù)庫內(nèi)桐愉,ApiBoot Security
定義了一個(gè)默認(rèn)表結(jié)構(gòu)的用戶信息數(shù)據(jù)表
,我們可以從官網(wǎng)找到建表語句直接在自己的數(shù)據(jù)庫內(nèi)創(chuàng)建即可掰派,當(dāng)然如果不使用默認(rèn)的表結(jié)構(gòu)可以進(jìn)行自定義讀取用戶信息从诲。
注意:在數(shù)據(jù)庫內(nèi)存放用戶的
密碼
必須是通過BCryptPasswordEncoder
加密后的密文字符串。
創(chuàng)建項(xiàng)目
對(duì)ApiBoot Security
的兩種認(rèn)證方式概念明白后靡羡,我們開始說下怎么才能使用JDBC
方式進(jìn)行用戶認(rèn)證系洛,我們先來使用IDEA
開發(fā)工具創(chuàng)建一個(gè)SpringBoot
項(xiàng)目俊性。
添加ApiBoot統(tǒng)一版本
在使用ApiBoot
內(nèi)提供的組件依賴時(shí),首先我們需要在pom.xml
文件內(nèi)添加ApiBoot統(tǒng)一版本
碎罚,如下所示:
<properties>
<java.version>1.8</java.version>
<!--ApiBoot版本號(hào)-->
<apiboot.version>2.1.5.RELEASE</apiboot.version>
</properties>
<dependencyManagement>
<dependencies>
<!--ApiBoot版本依賴-->
<dependency>
<groupId>org.minbox.framework</groupId>
<artifactId>api-boot-dependencies</artifactId>
<version>${apiboot.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
添加ApiBoot Security依賴
在項(xiàng)目pom.xml
文件添加ApiBoot Security
依賴磅废,如下所示:
<!--ApiBoot Security OAuth-->
<dependency>
<groupId>org.minbox.framework</groupId>
<artifactId>api-boot-starter-security-oauth-jwt</artifactId>
</dependency>
添加JDBC相關(guān)依賴
我們本章使用MySQL
數(shù)據(jù)庫做演示,我們需要添加相關(guān)的數(shù)據(jù)庫依賴
以及數(shù)據(jù)庫連接池依賴
荆烈,由于ApiBoot Security
讀取內(nèi)置的默認(rèn)用戶表結(jié)構(gòu)使用的是DataSource
拯勉,所以我們還需要添加一個(gè)可以實(shí)例化DataSource
的依賴,可以選擇api-boot-starter-mybatis-enhance
或者spring-boot-starter-jdbc
憔购,在pom.xml
添加依賴如下所示:
<!--SpringBoot Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--MySQL-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--Hikari-->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!--SpringBoot JDBC-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
注意:
spring-boot-starter-web
這個(gè)依賴不可少宫峦,在ApiBoot AutoConfiguration
內(nèi)需要一些Web
的依賴類。
創(chuàng)建默認(rèn)用戶表結(jié)構(gòu)
本章使用ApiBoot Security
提供的默認(rèn)用戶表結(jié)構(gòu)玫鸟,訪問官方文檔查看3.3 使用內(nèi)置表結(jié)構(gòu)的用戶导绷,將建表語句在自己數(shù)據(jù)庫內(nèi)執(zhí)行創(chuàng)建表信息,創(chuàng)建后添加一條用戶信息屎飘,如下所示:
INSERT INTO `api_boot_user_info` VALUES (1,'admin','昵稱','$2a$10$RbJGpi.v3PwkjrYENzOzTuMxazuanX3Qa2hwI/f55cYsZhFT/nX3.',NULL,NULL,NULL,'N','Y','O','2019-11-29 06:14:44');
配置數(shù)據(jù)源
依賴添加完成后我們?cè)?code>application.yml配置文件內(nèi)進(jìn)行配置數(shù)據(jù)源妥曲,如下所示:
spring:
application:
name: apiboot-security-customize-select-user
# 數(shù)據(jù)源配置
datasource:
type: com.zaxxer.hikari.HikariDataSource
url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8&serverTimezone=Asia/Shanghai
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
server:
port: 9090
配置ApiBootSecurity JDBC方式
由于ApiBoot Security
默認(rèn)使用memory
用戶認(rèn)證讀取方式,我們需要在application.yml
文件內(nèi)進(jìn)行修改钦购,如下所示:
# ApiBoot相關(guān)配置
api:
boot:
# 啟用ApiBoot Security 的JDBC方式
security:
away: jdbc
運(yùn)行測(cè)試
項(xiàng)目配置完成檐盟,下面我們通過XxxApplication
方式啟動(dòng)項(xiàng)目。
在獲取AccessToken
之前我們要知道的一點(diǎn)押桃,ApiBoot Security
內(nèi)部默認(rèn)集成了OAuth2
葵萎,而且還默認(rèn)配置了clientId
、clientSecret
客戶端基本信息唱凯,默認(rèn)值分別是ApiBoot
羡忘、ApiBootSecret
。
clientId = ApiBoot
clientSecret = ApiBootSecret
如果你對(duì)ApiBoot OAuth
其他功能有興趣可以查看ApiBoot OAuth文檔了解詳情磕昼。
獲取AccessToken
由于學(xué)習(xí)者的本機(jī)環(huán)境不同卷雕,下面采用兩種方式進(jìn)行獲取AccessToken
。
CURL方式
執(zhí)行如下命令獲取AccessToken
:
? ~ curl -X POST ApiBoot:ApiBootSecret@localhost:9090/oauth/token\?grant_type\=password\&username\=admin\&password\=123456
{"access_token":"d9cb97ee-d1bf-42e1-a7a0-c1002df48c52","token_type":"bearer","refresh_token":"db9e9d52-cbe3-4379-a5f2-ffaa34681c01","expires_in":2884,"scope":"api"}
PostMan方式
注意:獲取AccessToken的請(qǐng)求方式為
POST
.
敲黑板票从,劃重點(diǎn)
ApiBoot Security
不僅內(nèi)存方式
可以實(shí)現(xiàn)零代碼的方式進(jìn)行集成Spring Security
漫雕、OAuth2
,JDBC
方式同樣也可以纫骑,不過要根據(jù)ApiBoot
的約定創(chuàng)建用戶表蝎亚。
代碼示例
本篇文章示例源碼可以通過以下途徑獲取九孩,目錄為SpringBoot2.x/apiboot-security-customize-select-user
: