ApiBoot零代码整合Spring Security的JDBC
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
,而且还默认配置了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
: