Java进阶指南
表达式解析
UEL 统一表达式语言
Ognl 对象图导航语言
Spel Spring表达式语言
Java 进阶
SPI的高级用法
SLF4J的绑定原理
H2 JDBC驱动类注册与数据库引擎初始化原理
Java SPI与Dubbo SPI区别
Java 秒懂对象 PO、VO、BO、DTO、POJO!
Java POJO/DO/DTO/BO/VO概念及应用案例分析
一个线程oom,进程里其他线程还能运行吗?
jps命令详解
Java的BigDecimal也会存在丢失精度的问题
java中的枚举类和常量类区别在哪儿?
Java 打包 FatJar 方法小结
"too many open files"的原理和解决方案
GraalVM 专栏
GraalVM入门以及环境搭建
Maven 专栏
maven 跳过单元测试-maven.test.skip和skipTests的区别
maven 配置代码检查插件,生成检查报告
Maven 执行生命周期
maven 删除本地仓库当前项目的依赖包
Gradle 专栏
自己动手应用Groovy实现Gradle的DSL—Task定义
看懂Gradle脚本(1)- Groovy语言的Map语法糖
看懂Gradle脚本(2)- Groovy语言的闭包语法
看懂Gradle脚本(3)- Groovy AST转换
看懂Gradle脚本(4)- Groovy语法之运算符重载
看懂Gradle脚本(5)- 跟Gradle学领域驱动设计
看懂Gradle脚本(6)- Hello Groovy, Goodbye Getters&Setters
看懂Gradle脚本(7)- ext {}函数是如何实现的
Gradle 常见问题集锦
Spring 专栏
Spring AOP 使用介绍,从前世到今生
Spring IOC 容器源码分析
Spring AOP 源码解析
Spring @PropertySource 注解实现读取 yml 文件
Spring 好用的工具类
Spring @Async失效情况
Spring I/O 2023 干货视频精选!
Spring 动态刷新bean
Spring Cache缓存技术
Spring @Transactional注解失效情况
Spring Event 事件订阅踩坑
循环依赖
Spring 解析@Async引起的循环依赖
Spring 中的循环依赖
从源码层面深度剖析 Spring 循环依赖 | 京东云技术团队
Spring 不同平台构建出现循环依赖错误问题原因分析
SpringBoot 专栏
SpringBoot 构建FarJAR Maven配置
SpringBoot 项目启动慢原因分析
SpringBoot 资源文件问题总结(Spring Boot的静态资源访问,配置文件外置)
SpringBoot 读取Jar包中静态资源原理
SpringBoot 配置Undertow处理高并发
SpringBoot Maven Profile配合Spring Profile进行多环境配置和打包
SpringBoot 使用profile结合maven实现多环境配置
SpringBoot @ComponentScan注解过滤排除不加载某个类的3种方法
Mybatis 专栏
Mybatis 一级、二级缓存机制
Mybatis 关闭一级、二级缓存机制
MybatisPlus
MybatisPlus LambdaQueryWrapper类的实现原理
MybatisPlus 在不修改全局策略和字段注解的情况下将字段更新为null
并发与多线程
Java 从单核到多核的多线程并发
并发和并行的区别
Redisson 专栏
一次生产redisson 延时队列不消费问题排查
redisson 阻塞队列不消费问题排查
Spring Batch 专栏
批处理框架spring batch基础知识介绍
Shiro 专栏
一篇适合小白的Shiro教程
SpringMVC 专栏
SpringMVC 后端处理多文件上传如何保持最大的灵活性
@RequestParam的加与不加的作用
SpringCloud 专栏
Gateway 一文彻底解决跨域问题
ruoyi-vue-pro 开发指南
萌新必读
简介
交流群
视频教程
功能列表
快速启动(后端项目)
快速启动(前端项目)
接口文档
技术选型
项目结构
代码热加载
一键改包
删除功能
内网穿透
达梦数据库专属
后端手册
新建模块
代码生成【单表】(新增功能)
代码生成【主子表】
代码生成【树表】
功能权限
数据权限
用户体系
三方登录
OAuth 2.0(SSO 单点登录)
SaaS多租户【字段隔离】
SaaS 多租户【数据库隔离】
WebSocket 实时通讯
异常处理(错误码)
参数校验、时间传参
分页实现
VO 对象转换、数据翻译
文件存储(上传下载)
Excel 导入导出
操作日志、访问日志、异常日志
MyBatis 数据库
MyBatis 联表&分页查询
多数据源(读写分离)、事务
Redis 缓存
本地缓存
异步任务
分布式锁
幂等性(防重复提交)
请求限流(RateLimiter)
单元测试
验证码
工具类
配置管理
数据库文档
中间件手册
定时任务
消息队列(内存)
消息队列(Redis)
消息队列(RocketMQ)
消息队列(RabbitMQ)
消息队列(Kafka)
限流熔断
工作流手册
工作流演示
功能开启
工作流(达梦适配)
审批接入(流程表单)
审批接入(业务表单)
流程设计器(BPMN)
流程设计器(钉钉、飞书)
选择审批人、发起人自选
会签、或签、依次审批
流程发起、取消、重新发起
审批通过、不通过、驳回
审批加签、减签
审批转办、委派、抄送
执行监听器、任务监听器
流程表达式
流程审批通知
大屏手册
报表设计器
大屏设计器
支付手册
功能开启
支付宝支付接入
微信公众号支付接入
微信小程序支付接入
支付宝、微信退款接入
会员手册
功能开启
微信公众号登录
微信小程序登录
会员用户、标签、分组
会员等级、积分、签到
商城手册
商城演示
功能开启
商城装修
【商品】商品分类
【商品】商品属性
【商品】商品 SPU 与 SKU
【商品】商品评价
【交易】购物车
【交易】交易订单
【交易】售后退款
【交易】快递发货
【交易】门店自提
【交易】分销返佣
【营销】优惠劵
【营销】拼团活动
【营销】秒杀活动
【营销】砍价活动
【营销】满减送
【营销】限时折扣
【营销】内容管理
【统计】会员、商品、交易统计
ERP手册
ERP 演示
功能开启
【产品】产品信息、分类、单位
【库存】产品库存、库存明细
【库存】其它入库、其它出库
【库存】库存调拨、库存盘点
【采购】采购订单、入库、退货
【销售】销售订单、出库、退货
【财务】采购付款、销售收款
CRM 手册
CRM 演示
功能开启
【线索】线索管理
【客户】客户管理、公海客户
【商机】商机管理、商机状态
【合同】合同管理、合同提醒
【回款】回款管理、回款计划
【产品】产品管理、产品分类
【通用】数据权限
【通用】跟进记录、待办事项
公众号手册
功能开启
公众号接入
公众号粉丝
公众号标签
公众号消息
自动回复
公众号菜单
公众号素材
公众号图文
公众号统计
系统手册
短信配置
邮件配置
站内信配置
数据脱敏
敏感词
地区 & IP 库
运维手册
开发环境
Linux 部署
Docker 部署
Jenkins 部署
HTTPS 证书
服务监控
前端手册 Vue 3.x
开发规范
菜单路由
Icon 图标
字典数据
系统组件
通用方法
配置读取
CRUD 组件
国际化
IDE 调试
代码格式化
前端手册 Vue 2.x
开发规范
菜单路由
Icon 图标
字典数据
系统组件
通用方法
配置读取
更新日志
【v2.1.0】开发中
【v2.0.1】2024-03-01
【v2.0.0】2024-01-26
【v1.9.0】2023-12-01
【v1.8.3】2023-10-24
yudao-cloud 开发指南
萌新必读
简介
交流群
视频教程
功能列表
快速启动(后端项目)
快速启动(前端项目)
接口文档
技术选型
项目结构
代码热加载
一键改包
删除功能
内网穿透
达梦数据库专属
微服务手册
微服务调试(必读)
注册中心 Nacos
配置中心 Nacos
服务网关 Spring Cloud Gateway
服务调用 Feign
定时任务 XXL Job
消息队列(内存)
消息队列(Redis)
消息队列(RocketMQ)
消息队列(RabbitMQ)
消息队列(Kafka)
消息队列(Cloud)
分布式事务 Seata
服务保障 Sentinel
Spring Security 专栏
Spring Security 入门
Spring Security OAuth2 入门
Spring Security OAuth2 存储器
Spring Security OAuth2 单点登录
Spring Security 常见问题
Guava 专栏
Guava 常用API汇总
本文档使用 MrDoc 发布
-
+
首页
Spring Security OAuth2 单点登录
> 本文在提供完整代码示例,可见 [https://github.com/YunaiV/SpringBoot-Labs](https://github.com/YunaiV/SpringBoot-Labs) 的 [lab-68-spring-security-oauth](https://github.com/YunaiV/SpringBoot-Labs/tree/master/lab-68-spring-security-oauth) 目录。 > > 原创不易,给点个 [Star](https://github.com/YunaiV/SpringBoot-Labs/stargazers) 嘿,一起冲鸭! # 1\. 概述 在前面的文章中,我们学习了 Spring Security OAuth 的**简单**使用。 - [《芋道 Spring Security OAuth2 入门》](http://www.iocoder.cn/Spring-Security/OAuth2-learning/?self) - [《芋道 Spring Security OAuth2 存储器》](http://www.iocoder.cn/Spring-Security/OAuth2-learning-store/?self) 今天我们来搞**波“大”**的,通过 Spring Security OAuth 实现一个**单点登录**的功能。 可能会有**女**粉丝不太了解单点登录是什么?单点登录,英文是 **Single Sign On**,简称为 **SSO**,指的是当有**多个**系统需要登录时,用户只需要登录一个**统一**的登录系统,而无需在**多个**系统重复登录。 举个最常见的**例子**,我们在浏览器中使用阿里“全家桶”: > 求助信:麻烦有认识阿里的胖友,让他们给打下钱。。。 - 淘宝:[https://www.taobao.com](https://www.taobao.com/) - 天猫:[https://www.tmall.com](https://www.tmall.com/) - 飞猪:[https://www.fliggy.com](https://www.fliggy.com/) - ... 我们只需要在**统一登录系统**([https://login.taobao.com](https://login.taobao.com/))进行登录即可,而后就可以“愉快”的自由剁手,并且无需分别在淘宝、天猫、飞猪等等系统重新登录。  > 友情提示:更多单点登录的介绍,可见[《维基百科 —— 单点登录》](https://zh.wikipedia.org/wiki/%E5%96%AE%E4%B8%80%E7%99%BB%E5%85%A5)。 下面,我们正式搭建 Spring Security OAuth 实现 SSO 的**示例项目**,如下图所示:  - 创建 [`lab-68-demo21-authorization-server-on-sso`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/) 项目,作为**统一登录系统**。 > 旁白君:机智的胖友,是不是发现这个项目和**授权**服务器非常相似!!! - 创建 [`lab-68-demo21-resource-server-on-sso`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-resource-server-on-sso/) 项目,模拟需要登录的 **XXX 系统**。 > 旁白君:机智的胖友,是不是发现这个项目和**资源**服务器非常相似!!! # 2\. 搭建统一登录系统 > 示例代码对应仓库: > > - 统一登录系统:[`lab-68-demo21-authorization-server-on-sso`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/) 创建 [`lab-68-demo21-authorization-server-on-sso`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/) 项目,作为**统一登录系统**。 > 友情提示:整个实现代码,和我们前文看到的**授权**服务器是基本一致的。 ## 2.1 初始化数据库 在 [`resources/db`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/src/main/resources/db/) 目录下,有四个 SQL 脚本,分别用于初始化 User 和 OAuth 相关的表。  ### 2.1.1 初始化 OAuth 表 ① 执行 [`oauth_schema.sql`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/src/main/resources/db/oauth_schema.sql) 脚本,创建数据库**表结构**。 <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">drop</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_client_details;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> oauth_client_details (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> client_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>) PRIMARY <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">KEY</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> resource_ids <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> client_secret <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">scope</span> <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> authorized_grant_types <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> web_server_redirect_uri <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> authorities <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> access_token_validity <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">INTEGER</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> refresh_token_validity <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">INTEGER</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> additional_information <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">4096</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> autoapprove <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">not</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_client_token (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> authentication_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>) PRIMARY <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">KEY</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> user_name <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> client_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">not</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_access_token (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> authentication_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>) PRIMARY <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">KEY</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> user_name <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> client_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">authentication</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> refresh_token <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">not</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_refresh_token (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token_id <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">authentication</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">not</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_code (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> code <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>), <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">authentication</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">LONG</span> VARBINARY</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">create</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">table</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">if</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">not</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">exists</span> oauth_approvals (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> userId <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> clientId <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">scope</span> <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">255</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">status</span> <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">VARCHAR</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">10</span>),</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> expiresAt <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">TIMESTAMP</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">DEFAULT</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">CURRENT_TIMESTAMP</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> lastModifiedAt <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">TIMESTAMP</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">DEFAULT</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">CURRENT_TIMESTAMP</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> 结果如下图所示:  | 表 | 作用 | | --- | --- | | `oauth_access_token` | OAuth 2.0 **访问**令牌 | | `oauth_refresh_token` | OAuth 2.0 **刷新**令牌 | | `oauth_code` | OAuth 2.0 **授权码** | | `oauth_client_details` | OAuth 2.0 **客户端** | | `oauth_client_token` | | | `oauth_approvals` | | > 旁白君:这里的表结构设计,我们可以借鉴参考,实现自己的 OAuth 2.0 的功能。 ② 执行 [`oauth_data.sql`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/src/main/resources/db/oauth_data.sql) 脚本,插入一个客户端记录。 <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">INSERT</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">INTO</span> oauth_client_details</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> (client_id, client_secret, <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">scope</span>, authorized_grant_types,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> web_server_redirect_uri, authorities, access_token_validity,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> refresh_token_validity, additional_information, autoapprove)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">VALUES</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> (<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'clientapp'</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'112233'</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'read_userinfo,read_contacts'</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'password,authorization_code,refresh_token'</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'http://127.0.0.1:9090/login'</span>, <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">null</span>, <span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">3600</span>, <span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">864000</span>, <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">null</span>, <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">true</span>);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> > **注意**!这条记录的 `web_server_redirect_uri` 字段,我们设置为 [http://127.0.0.1:9090/login](http://127.0.0.1:9090/login),这是稍后我们搭建的 XXX 系统的回调地址。 > > - 统一登录系统采用 OAuth 2.0 的**授权码**模式进行授权。 > - 授权成功后,浏览器会跳转 [http://127.0.0.1:9090/login](http://127.0.0.1:9090/login) 回调地址,然后 XXX 系统会通过**授权码**向统一登录系统获取**访问令牌**。 > > 通过这样的方式,完成一次**单点登录**的过程。 结果如下图所示:  ### 2.1.2 初始化 User 表 ① 执行 [`user_schema.sql`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/src/main/resources/db/user_data.sql) 脚本,创建数据库**表结构**。 <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">DROP</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">TABLE</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">IF</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">EXISTS</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`authorities`</span>;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">CREATE</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">TABLE</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`authorities`</span> (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`username`</span> <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">varchar</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">50</span>) <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">NOT</span> <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">NULL</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`authority`</span> <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">varchar</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">50</span>) <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">NOT</span> <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">NULL</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">UNIQUE</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">KEY</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`ix_auth_username`</span> (<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`username`</span>,<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`authority`</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">) <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">ENGINE</span>=<span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">InnoDB</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">DEFAULT</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">CHARSET</span>=utf8;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">DROP</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">TABLE</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">IF</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">EXISTS</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`users`</span>;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">CREATE</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">TABLE</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`users`</span> (</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`username`</span> <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">varchar</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">50</span>) <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">NOT</span> <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">NULL</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`password`</span> <span class="built_in" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">varchar</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">500</span>) <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">NOT</span> <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">NULL</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`enabled`</span> tinyint(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">1</span>) <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">NOT</span> <span class="literal" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">NULL</span>,</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> PRIMARY <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">KEY</span> (<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`username`</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">) <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">ENGINE</span>=<span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">InnoDB</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">DEFAULT</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">CHARSET</span>=utf8;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> 结果如下图所示:  | 表 | 作用 | | --- | --- | | `users` | **用户**表 | | `authorities` | **授权**表,例如用户拥有的角色 | ② 执行 [`user_data.sql`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/src/main/resources/db/user_data.sql) 脚本,插入一个用户记录和一个授权记录。 <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">INSERT</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">INTO</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`authorities`</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">VALUES</span> (<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'yunai'</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'ROLE_USER'</span>);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">INSERT</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">INTO</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">`users`</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">VALUES</span> (<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'yunai'</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'112233'</span>, <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">'1'</span>);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> 结果如下图所示:  ## 2.2 引入依赖 创建 [`pom.xml`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/pom.xml) 文件,引入 Spring Security OAuth 依赖。 <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><?xml version="1.0" encoding="UTF-8"?></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">project</span> <span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">xmlns</span>=<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"http://maven.apache.org/POM/4.0.0"</span></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"> <span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">xmlns:xsi</span>=<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"http://www.w3.org/2001/XMLSchema-instance"</span></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"> <span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">xsi:schemaLocation</span>=<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">parent</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>lab-68<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>cn.iocoder.springboot.labs<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span>1.0-SNAPSHOT<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">parent</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">modelVersion</span>></span>4.0.0<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">modelVersion</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>lab-68-demo21-authorization-server-on-sso<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">properties</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 依赖相关配置 --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">spring.boot.version</span>></span>2.2.4.RELEASE<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">spring.boot.version</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 插件相关配置 --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">maven.compiler.target</span>></span>1.8<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">maven.compiler.target</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">maven.compiler.source</span>></span>1.8<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">maven.compiler.source</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">properties</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencyManagement</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencies</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>org.springframework.boot<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>spring-boot-starter-parent<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span>${spring.boot.version}<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">type</span>></span>pom<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">type</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">scope</span>></span>import<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">scope</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencies</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencyManagement</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencies</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 实现对 Spring MVC 的自动配置 --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>org.springframework.boot<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>spring-boot-starter-web<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 实现对 Spring Security OAuth2 的自动配置 --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>org.springframework.security.oauth.boot<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>spring-security-oauth2-autoconfigure<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span>${spring.boot.version}<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 实现对数据库连接池的自动化配置 --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>org.springframework.boot<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>spring-boot-starter-jdbc<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 本示例,我们使用 MySQL --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>mysql<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>mysql-connector-java<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span>5.1.48<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencies</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">project</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> ## 2.3 配置文件 创建 [`application.yaml`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/src/main/resources/application.yaml) 配置文件,添加**数据库连接池**的配置: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">spring:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># datasource 数据源配置内容,对应 DataSourceProperties 配置属性类</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> datasource:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> url:</span> <span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">jdbc:mysql://127.0.0.1:43063/demo-68-authorization-server-sso?useSSL=false&useUnicode=true&characterEncoding=UTF-8</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> driver-class-name:</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">com.mysql.jdbc.Driver</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> username:</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">root</span> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># 数据库账号</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> password:</span> <span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">123456</span> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># 数据库密码</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> ## 2.4 SecurityConfig 创建 [SecurityConfig](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/src/main/java/cn/iocoder/springboot/lab68/authorizationserverdemo/config/SecurityConfig.java) 配置类,通过 **Spring Security** 提供**用户认证**的功能。代码如下: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Configuration</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@EnableWebSecurity</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="class" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">class</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">SecurityConfig</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">extends</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">WebSecurityConfigurerAdapter</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">/**</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> * 数据源 DataSource</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> */</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Autowired</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">private</span> DataSource dataSource;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Bean</span>(name = BeanIds.AUTHENTICATION_MANAGER)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> AuthenticationManager <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">authenticationManagerBean</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">()</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">super</span>.authenticationManagerBean();</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Bean</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">static</span> NoOpPasswordEncoder <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">passwordEncoder</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">()</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> (NoOpPasswordEncoder) NoOpPasswordEncoder.getInstance();</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">protected</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(AuthenticationManagerBuilder auth)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> auth.jdbcAuthentication()</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .dataSource(dataSource);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">}</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> > 友情提示:如果胖友想要自定义用户的读取,可以参考[《芋道 Spring Boot 安全框架 Spring Security 入门》](http://www.iocoder.cn/Spring-Boot/Spring-Security/?self)文章。 ## 2.5 OAuth2AuthorizationServerConfig 创建 [OAuth2AuthorizationServerConfig](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/src/main/java/cn/iocoder/springboot/lab68/authorizationserverdemo/config/OAuth2AuthorizationServerConfig.java) 配置类,通过 **Spring Security OAuth** 提供**授权服务器**的功能。代码如下: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Configuration</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@EnableAuthorizationServer</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="class" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">class</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">OAuth2AuthorizationServerConfig</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">extends</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">AuthorizationServerConfigurerAdapter</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">/**</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> * 用户认证 Manager</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> */</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Autowired</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">private</span> AuthenticationManager authenticationManager;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">/**</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> * 数据源 DataSource</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"> */</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Autowired</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">private</span> DataSource dataSource;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Bean</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> TokenStore <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">jdbcTokenStore</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">()</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">new</span> JdbcTokenStore(dataSource);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(AuthorizationServerEndpointsConfigurer endpoints)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> endpoints.authenticationManager(authenticationManager)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> .tokenStore(jdbcTokenStore());</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(AuthorizationServerSecurityConfigurer oauthServer)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> oauthServer.checkTokenAccess(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"isAuthenticated()"</span>);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Bean</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> ClientDetailsService <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">jdbcClientDetailsService</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">()</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">new</span> JdbcClientDetailsService(dataSource);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Override</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">configure</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(ClientDetailsServiceConfigurer clients)</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">throws</span> Exception </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> clients.withClientDetails(jdbcClientDetailsService());</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">}</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> > 友情提示:如果胖友看不懂这个配置类,回到[《芋道 Spring Security OAuth2 存储器》](http://www.iocoder.cn/Spring-Security/OAuth2-learning-store/?self)文章复习下。 ## 2.6 AuthorizationServerApplication 创建 [AuthorizationServerApplication](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-authorization-server-on-sso/src/main/java/cn/iocoder/springboot/lab68/authorizationserverdemo/AuthorizationServerApplication.java) 类,统一登录系统的启动类。代码如下: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@SpringBootApplication</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="class" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">class</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">AuthorizationServerApplication</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">static</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">main</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(String[] args)</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> SpringApplication.run(AuthorizationServerApplication.class, args);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">}</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> ## 2.7 简单测试 执行 AuthorizationServerApplication 启动统一登录系统。下面,我们使用 Postman 模拟一个 Client,**测试我们是否搭建成功**! `POST` 请求 [http://localhost:8080/oauth/token](http://localhost:8080/oauth/token) 地址,使用密码模式进行**授权**。如下图所示:  成功获取到访问令牌,成功! # 3\. 搭建 XXX 系统 > 示例代码对应仓库: > > - XXX 系统:[`lab-68-demo21-resource-server-on-sso`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-resource-server-on-sso/) 创建 [`lab-68-demo21-resource-server-on-sso`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-resource-server-on-sso/) 项目,搭建 **XXX 系统**,接入**统一登录系统**实现 SSO 功能。 > 友情提示:整个实现代码,和我们前文看到的**资源**服务器是基本一致的。 ## 3.1 引入依赖 创建 [`pom.xml`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/pom.xml) 文件,引入 Spring Security OAuth 依赖。 <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><?xml version="1.0" encoding="UTF-8"?></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">project</span> <span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">xmlns</span>=<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"http://maven.apache.org/POM/4.0.0"</span></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"> <span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">xmlns:xsi</span>=<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"http://www.w3.org/2001/XMLSchema-instance"</span></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"> <span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">xsi:schemaLocation</span>=<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">parent</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>lab-68<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>cn.iocoder.springboot.labs<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span>1.0-SNAPSHOT<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">parent</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">modelVersion</span>></span>4.0.0<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">modelVersion</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>lab-68-demo21-resource-server<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">properties</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 依赖相关配置 --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">spring.boot.version</span>></span>2.2.4.RELEASE<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">spring.boot.version</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 插件相关配置 --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">maven.compiler.target</span>></span>1.8<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">maven.compiler.target</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">maven.compiler.source</span>></span>1.8<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">maven.compiler.source</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">properties</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencyManagement</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencies</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>org.springframework.boot<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>spring-boot-starter-parent<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span>${spring.boot.version}<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">type</span>></span>pom<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">type</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">scope</span>></span>import<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">scope</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencies</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencyManagement</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencies</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 实现对 Spring MVC 的自动配置 --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>org.springframework.boot<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>spring-boot-starter-web<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"><!-- 实现对 Spring Security OAuth2 的自动配置 --></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span>org.springframework.security.oauth.boot<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">groupId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span>spring-security-oauth2-autoconfigure<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">artifactId</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span>${spring.boot.version}<span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">version</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependency</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">dependencies</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="tag" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"></<span class="name" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">project</span>></span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> ## 3.2 配置文件 创建 [`application.yaml`](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-resource-server-on-sso/src/main/resources/application.yml) 配置文件,添加 **SSO** 相关配置: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">server:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> port:</span> <span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">9090</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> servlet:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> session:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> cookie:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> name:</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">SSO-SESSIONID</span> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># 自定义 Session 的 Cookie 名字,防止冲突。冲突后,会导致 SSO 登录失败。</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">security:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> oauth2:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># OAuth2 Client 配置,对应 OAuth2ClientProperties 类</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> client:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> client-id:</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">clientapp</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> client-secret:</span> <span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">112233</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> user-authorization-uri:</span> <span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">http://127.0.0.1:8080/oauth/authorize</span> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># 获取用户的授权码地址</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> access-token-uri:</span> <span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">http://127.0.0.1:8080/oauth/token</span> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># 获取访问令牌的地址</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># OAuth2 Resource 配置,对应 ResourceServerProperties 类</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> resource:</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> token-info-uri:</span> <span class="attr" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">http://127.0.0.1:8080/oauth/check_token</span> <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);"># 校验访问令牌是否有效的地址</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> ① `server.servlet.session.cookie.name` 配置项,自定义 Session 的 Cookie 名字,防止冲突。冲突后,会导致 SSO 登录失败。 > 友情提示:具体的值,胖友可以根据自己的喜欢设置。 ② `security.oauth2.client` 配置项,OAuth2 Client 配置,对应 [OAuth2ClientProperties](https://github.com/spring-projects/spring-boot/blob/master/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/OAuth2ClientProperties.java) 类。在这个配置项中,我们添加了客户端的 `client-id` 和 `client-secret`。 ③ `security.oauth2.client.user-authorization-uri` 配置项,获取用户的**授权码**地址。 在访问 XXX 系统需要登录的地址时,Spring Security OAuth 会自动跳转到**统一登录系统**,进行统一登录获取**授权**。 而这里配置的 `security.oauth2.client.user-authorization-uri` 地址,就是之前**授权**服务器的 `oauth/authorize` 接口,可以进行**授权码**模式的授权。 > 友情提示:如果胖友忘记**授权**服务器的 `oauth/authorize` 接口,建议回看下[《芋道 Spring Security OAuth2 入门》](http://www.iocoder.cn/Spring-Security/OAuth2-learning/?self)的[「3. 授权码模式」](https://www.iocoder.cn/Spring-Security/OAuth2-learning-sso/?self#)小节。 ④ `security.oauth2.client.access-token-uri` 配置项,获取**访问令牌**的地址。 在**统一登录系统**完成统一登录并授权后,浏览器会跳转回 XXX 系统的回调地址。在该地址上,会调用**统一登录系统**的 `security.oauth2.client.user-authorization-uri` 地址,通过**授权码**获取到**访问令牌**。 而这里配置的 `security.oauth2.client.user-authorization-uri` 地址,就是之前**授权**服务器的 `oauth/token` 接口。 ⑤ `security.oauth2.resource.client.token-info-uri` 配置项,校验**访问令牌**是否有效的地址。 在获取到**访问令牌**之后,每次请求 XXX 系统时,都会调用 **统一登录系统**的 `security.oauth2.resource.client.token-info-uri` 地址,校验访问令牌的有效性,同时返回**用户的基本信息**。 而这里配置的 `security.oauth2.resource.client.token-info-uri` 地址,就是之前**授权**服务器的 `oauth/check_token` 接口。 --- 至此,我们可以发现,Spring Security OAuth 实现的 SSO 单点登录功能,是基于其**授权码模式**实现的。这一点,非常重要,稍后我们演示下会更加容易理解到。 ## 3.3 OAuthSsoConfig 创建 [OAuthSsoConfig](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-resource-server-on-sso/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/OAuthSsoConfig.java) 类,配置接入 SSO 功能。代码如下: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Configuration</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@EnableOAuth</span>2Sso <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// 开启 Sso 功能</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="class" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">class</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">OAuthSsoConfig</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">}</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> 在类上添加 [`@EnableOAuth2Sso`](https://github.com/spring-projects/spring-security-oauth2-boot/blob/master/spring-security-oauth2-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/EnableOAuth2Sso.java) 注解,声明基于 Spring Security OAuth 的方式接入 SSO 功能。 > 友情提示:想要深入的胖友,可以看看 [SsoSecurityConfigurer](https://github.com/spring-projects/spring-security-oauth2-boot/blob/master/spring-security-oauth2-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/security/oauth2/client/SsoSecurityConfigurer.java) 类。 ## 3.4 UserController 创建 [UserController](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-resource-server-on-sso/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/controller/UserController.java) 类,提供获取当前用户的 `/user/info` 接口。代码如下: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@RestController</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@RequestMapping</span>(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"/user"</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="class" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">class</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">UserController</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@RequestMapping</span>(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"/info"</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> Authentication <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">info</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(Authentication authentication)</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> authentication;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">}</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> ## 3.5 ResourceServerApplication 创建 [ResourceServerApplication](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-resource-server-on-sso/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/ResourceServerApplication.java) 类,XXX 系统的启动类。代码如下: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@SpringBootApplication</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="class" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">class</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">ResourceServerApplication</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">static</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">void</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">main</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">(String[] args)</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> SpringApplication.run(ResourceServerApplication.class, args);</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">}</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> ## 3.6 简单测试(第一弹) 执行 ResourceServerApplication 启动 XXX 系统。下面,我们来演示下 SSO 单点登录的过程。 ① 使用浏览器,访问 **XXX 系统**的 [http://127.0.0.1:9090/user/info](http://127.0.0.1:9090/user/info) 地址。因为暂未登录,所以被重定向到**统一登录系统**的 [http://127.0.0.1:8080/oauth/authorize](http://127.0.0.1:8080/oauth/authorize) **授权**地址。 又因为在**统一登录系统**暂未登录,所以被重定向到**统一登录系统**的 [http://127.0.0.1:8080/login](http://127.0.0.1:8080/login) **登录**地址。如下图所示:  ② 输入用户的账号密码「yunai/1024」,进行**统一登录系统**的登录。登录完成后,进入**统一登录系统**的 [http://127.0.0.1:8080/oauth/authorize](http://127.0.0.1:8080/oauth/authorize) **授权**地址。如下图所示:  ③ 点击「Authorize」按钮,完成用户的授权。授权完成后,浏览器重定向到 **XXX 系统**的 [http://127.0.0.1:9090/login](http://127.0.0.1:9090/login) **回调**地址。 在 **XX 系统**的回调地址,拿到授权的**授权码**后,会**自动**请求**统一登录系统**,通过**授权码**获取到**访问令牌**。如此,我们便完成了 **XXX 系统** 的登录。 获取授权码完成后,**自动**跳转到登录前的 [http://127.0.0.1:9090/user/info](http://127.0.0.1:9090/user/info) 地址,打印出当前登录的用户信息。如下图所示:  --- 如此,我们从**统一登录系统**也拿到了**用户信息**。下面,我们来进一步将 Spring Security 的**权限控制**功能来演示下。 ## 3.7 SecurityConfig 创建 [SecurityConfig](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-resource-server-on-sso/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/config/SecurityConfig.java) 配置类,添加 Spring Security 的功能。代码如下: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Configuration</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@EnableGlobalMethodSecurity</span>(prePostEnabled = <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">true</span>) <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// 开启对 Spring Security 注解的方法,进行权限验证。</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@Order</span>(<span class="number" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">101</span>) <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// OAuth2SsoDefaultConfiguration 使用了 Order(100),所以这里设置为 Order(101),防止相同顺序导致报错</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="class" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">class</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">SecurityConfig</span> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">extends</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">WebSecurityConfigurerAdapter</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">}</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> 在类上,增加 [`@EnableGlobalMethodSecurity`](https://docs.spring.io/spring-security/site/docs/current/api/org/springframework/security/config/annotation/method/configuration/EnableGlobalMethodSecurity.html) 注解,开启对 Spring Security 注解的方法,进行权限验证。 ## 3.8 DemoController 创建 [DemoController](https://github.com/YunaiV/SpringBoot-Labs/blob/master/lab-68-spring-security-oauth/lab-68-demo21-resource-server-on-sso/src/main/java/cn/iocoder/springboot/lab68/resourceserverdemo/controller/DemoController.java) 类,提供测试权限的功能的接口。代码如下: <table style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-weight: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border-collapse: collapse; border-spacing: 0px; border: 0px; width: auto;"><tbody style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><tr style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><td class="code" style="margin-block: 0px; margin: 0px; padding: 0px; outline: 0px; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: middle; border: 0px; text-align: left; font-weight: 400;"><pre style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: Monaco, Menlo, Consolas, "Courier New", monospace; font-size: 16px; vertical-align: baseline; background: rgb(29, 31, 33); overflow: auto; color: rgb(197, 200, 198); line-height: 1.5;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@RestController</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@RequestMapping</span>(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"/demo"</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> <span class="class" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(204, 102, 102);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">class</span> <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(240, 198, 116);">DemoController</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@GetMapping</span>(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"/admin-list"</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@PreAuthorize</span>(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"hasRole('ADMIN')"</span>) <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// 要求管理员 ROLE_ADMIN 角色</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> String <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">adminList</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">()</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"管理员列表"</span>;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@GetMapping</span>(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"/user-list"</span>)</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="meta" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">@PreAuthorize</span>(<span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"hasRole('USER')"</span>) <span class="comment" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(150, 152, 150);">// 要求普通用户 ROLE_USER 角色</span></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="function" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);"><span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">public</span> String <span class="title" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(129, 162, 190);">userList</span><span class="params" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(222, 147, 95);">()</span> </span>{</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> <span class="keyword" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(178, 148, 187);">return</span> <span class="string" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline; color: rgb(181, 189, 104);">"用户列表"</span>;</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"> }</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;"></span><br style="margin-block: 0px; margin: 0px; padding: 0px;"><span class="line" style="margin-block: 0px; margin: 0px; padding: 0px; border: 0px; outline: 0px; font-weight: inherit; font-style: inherit; font-family: inherit; font-size: 16px; vertical-align: baseline;">}</span><br style="margin-block: 0px; margin: 0px; padding: 0px;"></pre></td></tr></tbody></table> 因为当前登录的用户只有 **ROLE\_USE** 角色,所以**可以**访问 `/demo/user-list` 接口,**无法**访问 `/demo/admin-list` 接口。 ## 3.9 简单测试(第二弹) 执行 ResourceServerApplication **重启** XXX 系统。下面,我们来演示下 Spring Security 的权限控制功能。 ① 使用浏览器,访问 [http://127.0.0.1:9090/demo/user-list](http://127.0.0.1:9090/demo/user-list) 地址,**成功**。如下图所示:  ② 使用浏览器,访问 [http://127.0.0.1:9090/demo/admin-list](http://127.0.0.1:9090/demo/admin-list) 地址,**失败**。如下图所示:  # 666\. 彩蛋 至此,我们成功使用 Spring Security OAuth 实现了一个 SSO 单点登录的示例。下图,是 SSO 的整体流程图,胖友可以继续深入理解下:  后续,想要深入的胖友,可以看看 Spring Security OAuth 提供的如下两个过滤器: - [OAuth2ClientContextFilter](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/client/filter/OAuth2ClientContextFilter.java) - [OAuth2ClientAuthenticationProcessingFilter](https://github.com/spring-projects/spring-security-oauth/blob/master/spring-security-oauth2/src/main/java/org/springframework/security/oauth2/client/filter/OAuth2ClientAuthenticationProcessingFilter.java)
LazzMan
2024年4月30日 17:41
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码