ApiBoot零代码整合Spring Security的JDBC方式获取AccessToken

ApiBoot Security内部提供了两种方式进行读取需要认证的用户信息,在之前的文章中讲到过ApiBoot Security使用内存方式(memory)不写一行代码就可以实现用户的认证并获取AccessToken,那我们使用JDBC方式是不是也是这么的简单呢?

免费教程专题

恒宇少年在博客整理三套免费学习教程专题,由于文章偏多特意添加了阅读指南,新文章以及之前的文章都会在专题内陆续填充,希望可以帮助大家解惑更多知识点。

如果你还对ApiBoot不了解,可以通过以下的途径来获取帮助。

ApiBoot Security的认证方式

有一些同学可能对ApiBoot Security的两种认证方式还不太了解,下面介绍下这两种认证方式的区别。

内存方式

内存方式(memory)是将用户信息(用户名、密码、角色列表)在application.yml文件内配置,可配置多个用户,项目启动后将用户信息加载到内存中,用于获取AccessToken时的认证。

数据库方式

数据库方式(jdbc)是将用户信息保存到数据库内,ApiBoot Security定义了一个默认表结构的用户信息数据表,我们可以从官网找到建表语句直接在自己的数据库内创建即可,当然如果不使用默认的表结构可以进行自定义读取用户信息。

注意:在数据库内存放用户的密码必须是通过BCryptPasswordEncoder加密后的密文字符串。

创建项目

ApiBoot Security的两种认证方式概念明白后,我们开始说下怎么才能使用JDBC方式进行用户认证,我们先来使用IDEA开发工具创建一个SpringBoot项目。

添加ApiBoot统一版本

在使用ApiBoot内提供的组件依赖时,首先我们需要在pom.xml文件内添加ApiBoot统一版本,如下所示:

<properties>
    <java.version>1.8</java.version>
    <!--ApiBoot版本号-->
    <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依赖

在项目pom.xml文件添加ApiBoot Security依赖,如下所示:

<!--ApiBoot Security OAuth-->
<dependency>
  <groupId>org.minbox.framework</groupId>
  <artifactId>api-boot-starter-security-oauth-jwt</artifactId>
</dependency>

添加JDBC相关依赖

我们本章使用MySQL数据库做演示,我们需要添加相关的数据库依赖以及数据库连接池依赖,由于ApiBoot Security读取内置的默认用户表结构使用的是DataSource,所以我们还需要添加一个可以实例化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这个依赖不可少,在ApiBoot AutoConfiguration内需要一些Web的依赖类。

创建默认用户表结构

本章使用ApiBoot Security提供的默认用户表结构,访问官方文档查看3.3 使用内置表结构的用户,将建表语句在自己数据库内执行创建表信息,创建后添加一条用户信息,如下所示:

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');

配置数据源

依赖添加完成后我们在application.yml配置文件内进行配置数据源,如下所示:

spring:
  application:
    name: apiboot-security-customize-select-user
  # 数据源配置
  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默认使用memory用户认证读取方式,我们需要在application.yml文件内进行修改,如下所示:

# ApiBoot相关配置
api:
  boot:
    # 启用ApiBoot Security 的JDBC方式
    security:
      away: jdbc

运行测试

项目配置完成,下面我们通过XxxApplication方式启动项目。

在获取AccessToken之前我们要知道的一点,ApiBoot Security内部默认集成了OAuth2,而且还默认配置了clientIdclientSecret客户端基本信息,默认值分别是ApiBootApiBootSecret

clientId = ApiBoot
clientSecret = ApiBootSecret

如果你对ApiBoot OAuth其他功能有兴趣可以查看ApiBoot OAuth文档了解详情。

获取AccessToken

由于学习者的本机环境不同,下面采用两种方式进行获取AccessToken

CURL方式

执行如下命令获取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的请求方式为POST.

敲黑板,划重点

ApiBoot Security不仅内存方式可以实现零代码的方式进行集成Spring SecurityOAuth2JDBC方式同样也可以,不过要根据ApiBoot的约定创建用户表。

代码示例

本篇文章示例源码可以通过以下途径获取,目录为SpringBoot2.x/apiboot-security-customize-select-user

作者个人 博客
使用开源框架 ApiBoot 助你成为Api接口服务架构师

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容