ApiBoot Security
内部提供了两种方式进行读取需要认证的用户信息,在之前的文章中讲到过ApiBoot Security
使用内存方式(memory)
不写一行代码就可以实现用户的认证并获取AccessToken
,那我们使用JDBC
方式是不是也是这么的简单呢?
如果你还对ApiBoot
不了解,可以通过以下的途径来获取帮助。
- 官方文档:http://apiboot.minbox.io
- 源码:https://gitee.com/minbox-projects/api-boot
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
,而且还默认配置了clientId
、clientSecret
客户端基本信息,默认值分别是ApiBoot
、ApiBootSecret
。
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 Security
、OAuth2
,JDBC
方式同样也可以,不过要根据ApiBoot
的约定创建用户表。
代码示例
本篇文章示例源码可以通过以下途径获取,目录为SpringBoot2.x/apiboot-security-customize-select-user
:
- Gitee:https://gitee.com/hengboy/spring-boot-chapter