ApiBoot零代碼整合Spring Security的JDBC方式獲取AccessToken

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)配置了clientIdclientSecret客戶端基本信息唱凯,默認(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漫雕、OAuth2JDBC方式同樣也可以纫骑,不過要根據(jù)ApiBoot的約定創(chuàng)建用戶表蝎亚。

代碼示例

本篇文章示例源碼可以通過以下途徑獲取九孩,目錄為SpringBoot2.x/apiboot-security-customize-select-user

作者個(gè)人 博客
使用開源框架 ApiBoot 助你成為Api接口服務(wù)架構(gòu)師

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末先馆,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子躺彬,更是在濱河造成了極大的恐慌煤墙,老刑警劉巖梅惯,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異仿野,居然都是意外死亡铣减,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門脚作,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葫哗,“玉大人,你說我怎么就攤上這事球涛×诱耄” “怎么了?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵亿扁,是天一觀的道長(zhǎng)捺典。 經(jīng)常有香客問我,道長(zhǎng)从祝,這世上最難降的妖魔是什么襟己? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮牍陌,結(jié)果婚禮上擎浴,老公的妹妹穿的比我還像新娘。我一直安慰自己呐赡,他們只是感情好退客,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著链嘀,像睡著了一般萌狂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上怀泊,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天茫藏,我揣著相機(jī)與錄音,去河邊找鬼霹琼。 笑死务傲,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的枣申。 我是一名探鬼主播售葡,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼忠藤!你這毒婦竟也來了挟伙?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤模孩,失蹤者是張志新(化名)和其女友劉穎尖阔,沒想到半個(gè)月后贮缅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡介却,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年谴供,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片齿坷。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桂肌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出永淌,到底是詐尸還是另有隱情轴或,我是刑警寧澤,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布仰禀,位于F島的核電站照雁,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏答恶。R本人自食惡果不足惜饺蚊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望悬嗓。 院中可真熱鬧污呼,春花似錦、人聲如沸包竹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽周瞎。三九已至苗缩,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間声诸,已是汗流浹背酱讶。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留彼乌,地道東北人泻肯。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像慰照,于是被迫代替她去往敵國(guó)和親灶挟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容