增加 Gradle 依赖方式和 properties 风格配置

This commit is contained in:
click33
2022-10-20 13:06:36 +08:00
parent febfdd9037
commit 20ecd050c6
40 changed files with 821 additions and 168 deletions

View File

@@ -4,9 +4,9 @@ server:
# Sa-Token 配置 # Sa-Token 配置
sa-token: sa-token:
# -------------- SSO-模式一相关配置 (非模式一不需要配置) # ------- SSO-模式一相关配置 (非模式一不需要配置)
# cookie: # cookie:
# 配置Cookie作用域 # 配置 Cookie 作用域
# domain: stp.com # domain: stp.com
# ------- SSO-模式二相关配置 # ------- SSO-模式二相关配置
@@ -18,7 +18,7 @@ sa-token:
# 是否打开单点注销功能 # 是否打开单点注销功能
is-slo: true is-slo: true
# ------- SSO-模式三相关配置 下面的配置在SSO模式三并且 is-slo=true 时打开) ------- # ------- SSO-模式三相关配置 下面的配置在SSO模式三并且 is-slo=true 时打开)
# 是否打开模式三 # 是否打开模式三
isHttp: true isHttp: true
# 接口调用秘钥用于SSO模式三的单点注销功能 # 接口调用秘钥用于SSO模式三的单点注销功能

View File

@@ -2,7 +2,7 @@
server: server:
port: 9001 port: 9001
# sa-token配置 # Sa-Token 配置
sa-token: sa-token:
# SSO-相关配置 # SSO-相关配置
sso: sso:
@@ -11,7 +11,7 @@ sa-token:
# SSO-Server端-单点注销地址 # SSO-Server端-单点注销地址
slo-url: http://sso.stp.com:9000/sso/logout slo-url: http://sso.stp.com:9000/sso/logout
# 配置Sa-Token单独使用的Redis连接 此处需要和SSO-Server端连接同一个Redis # 配置 Sa-Token 单独使用的Redis连接 此处需要和SSO-Server端连接同一个Redis
alone-redis: alone-redis:
# Redis数据库索引 # Redis数据库索引
database: 1 database: 1

View File

@@ -185,7 +185,13 @@
</script> </script>
<script src="static/docsify.min.js"></script> <script src="static/docsify.min.js"></script>
<script src="static/docsify-copy-code.min.js"></script> <script src="static/docsify-copy-code.min.js"></script>
<script src="static/prism-java.min.js"></script>
<!-- 语言合集https://cdn.jsdelivr.net/npm/prismjs@1/components/ -->
<script src="static/prism/prism-java.min.js"></script>
<script src="static/prism/prism-gradle.min.js"></script>
<script src="static/prism/prism-yaml.min.js"></script>
<script src="static/prism/prism-properties.min.js"></script>
<!-- 搜索框 --> <!-- 搜索框 -->
<script src="static/search.min.js"></script> <script src="static/search.min.js"></script>
<!-- 多 tab 切换 --> <!-- 多 tab 切换 -->

View File

@@ -64,10 +64,19 @@ public class CustomSaTokenContextForSpring extends SaTokenContextForSpring {
### 方案二直接在yml中配置当前项目的网络访问地址 ### 方案二直接在yml中配置当前项目的网络访问地址
在 `application.yml` 中增加配置: 在 `application.yml` 中增加配置:
``` yml
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
# 配置当前项目的网络访问地址 # 配置当前项目的网络访问地址
curr-domain: http://local.dev33.cn:8902/api curr-domain: http://local.dev33.cn:8902/api
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# 配置当前项目的网络访问地址
sa-token.curr-domain=http://local.dev33.cn:8902/api
```
<!---------------------------- tabs:end ---------------------------->
即可避免路由转发过程中丢失 uri 的问题 即可避免路由转发过程中丢失 uri 的问题

View File

@@ -97,7 +97,7 @@ SaTokenContext 是对接不同框架的上下文接口,注入流程和第二
| 插件 | 功能 | 状态 | | 插件 | 功能 | 状态 |
| :-------- | :-------- | :-------- | | :-------- | :-------- | :-------- |
| sa-token-solon-starter | Sa-Token 与 Solon 的整合 | <font color="green" >已完成</font> | | sa-token-solon-starter | Sa-Token 与 Solon 的整合 | <font color="green" >已完成</font> |
| sa-token-jfinal-starter | Sa-Token 与 JFinal 的整合 | 待开发 | | sa-token-jfinal-starter | Sa-Token 与 JFinal 的整合 | <font color="green" >已完成</font> |
| sa-token-hasor-starter | Sa-Token 与 Hasor 的整合 | 待开发 | | sa-token-hasor-starter | Sa-Token 与 Hasor 的整合 | 待开发 |
##### 标签方言: ##### 标签方言:

View File

@@ -71,6 +71,8 @@ public interface SaTokenContext {
先别着急动手,如果你的 Web 框架是基于 Servlet 规范开发的,那么 Sa-Token 已经为你封装好了三个 Model 接口的实现,你要做的就是引入 `sa-token-servlet`包即可: 先别着急动手,如果你的 Web 框架是基于 Servlet 规范开发的,那么 Sa-Token 已经为你封装好了三个 Model 接口的实现,你要做的就是引入 `sa-token-servlet`包即可:
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证ServletAPI 集成包) --> <!-- Sa-Token 权限认证ServletAPI 集成包) -->
<dependency> <dependency>
@@ -79,6 +81,13 @@ public interface SaTokenContext {
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证ServletAPI 集成包)
implementation 'cn.dev33:sa-token-servlet:${sa.top.version}'
```
<!---------------------------- tabs:end ------------------------------>
如果你的 Web 框架不是基于 Servlet 规范,那么你就需要手动实现这三个 Model 接口,我们可以参考 `sa-token-servlet` 是怎样实现的: 如果你的 Web 框架不是基于 Servlet 规范,那么你就需要手动实现这三个 Model 接口,我们可以参考 `sa-token-servlet` 是怎样实现的:
[SaRequestForServlet.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-starter/sa-token-servlet/src/main/java/cn/dev33/satoken/servlet/model/SaRequestForServlet.java)、 [SaRequestForServlet.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-starter/sa-token-servlet/src/main/java/cn/dev33/satoken/servlet/model/SaRequestForServlet.java)、

View File

@@ -4,13 +4,24 @@
Sa-Token 提供两种Token自动过期策略分别是`timeout``activity-timeout`,配置方法如下: Sa-Token 提供两种Token自动过期策略分别是`timeout``activity-timeout`,配置方法如下:
``` yml <!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
# Token 有效期单位默认30天, -1代表永不过期 # Token 有效期单位默认30天, -1代表永不过期
timeout: 2592000 timeout: 2592000
# Token 临时有效期 (指定时间内无操作就视为 Token 过期) 单位: 秒,-1代表不设限 # Token 临时有效期 (指定时间内无操作就视为 Token 过期) 单位: 秒,-1代表不设限
activity-timeout: -1 activity-timeout: -1
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# Token 有效期单位默认30天, -1代表永不过期
sa-token.timeout=2592000
# Token 临时有效期 (指定时间内无操作就视为 Token 过期) 单位: 秒,-1代表不设限
sa-token.activity-timeout=-1
```
<!---------------------------- tabs:end ---------------------------->
两者的区别,可以通过下面的例子体现: 两者的区别,可以通过下面的例子体现:

View File

@@ -34,8 +34,10 @@
集成依赖示例: 集成依赖示例:
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 整合 Redis (使用jackson序列化方式) --> <!-- Sa-Token 整合 Redis 使用 jackson 序列化方式 -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId> <artifactId>sa-token-dao-redis-jackson</artifactId>
@@ -46,6 +48,13 @@
<artifactId>commons-pool2</artifactId> <artifactId>commons-pool2</artifactId>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
implementation 'cn.dev33:sa-token-dao-redis-jackson:${sa.top.version}'
implementation 'org.apache.commons:commons-pool2'
```
<!---------------------------- tabs:end ------------------------------>
详细参考:[集成 Redis](/up/integ-redis) 详细参考:[集成 Redis](/up/integ-redis)

View File

@@ -14,6 +14,8 @@
首先,根据 [依赖引入说明](/micro/import-intro) 引入正确的依赖,以`[SpringCloud Gateway]`为例: 首先,根据 [依赖引入说明](/micro/import-intro) 引入正确的依赖,以`[SpringCloud Gateway]`为例:
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证Reactor响应式集成, 在线文档http://sa-token.dev33.cn/ --> <!-- Sa-Token 权限认证Reactor响应式集成, 在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
@@ -21,7 +23,8 @@
<artifactId>sa-token-reactor-spring-boot-starter</artifactId> <artifactId>sa-token-reactor-spring-boot-starter</artifactId>
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
<!-- Sa-Token 整合 Redis (使用jackson序列化方式) -->
<!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId> <artifactId>sa-token-dao-redis-jackson</artifactId>
@@ -32,6 +35,18 @@
<artifactId>commons-pool2</artifactId> <artifactId>commons-pool2</artifactId>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证Reactor响应式集成在线文档http://sa-token.dev33.cn/
implementation 'cn.dev33:sa-token-reactor-spring-boot-starter:${sa.top.version}'
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
implementation 'cn.dev33:sa-token-dao-redis-jackson:${sa.top.version}'
implementation 'org.apache.commons:commons-pool2'
```
<!---------------------------- tabs:end ------------------------------>
Redis包是必须的因为我们需要和各个服务通过Redis来同步数据 Redis包是必须的因为我们需要和各个服务通过Redis来同步数据
### 2、实现鉴权接口 ### 2、实现鉴权接口
@@ -78,7 +93,7 @@ public class SaTokenConfigure {
public SaReactorFilter getSaReactorFilter() { public SaReactorFilter getSaReactorFilter() {
return new SaReactorFilter() return new SaReactorFilter()
// 拦截地址 // 拦截地址
.addInclude("/**") .addInclude("/**") /* 拦截全部path */
// 开放地址 // 开放地址
.addExclude("/favicon.ico") .addExclude("/favicon.ico")
// 鉴权方法:每次访问进入 // 鉴权方法:每次访问进入
@@ -92,7 +107,7 @@ public class SaTokenConfigure {
SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods")); SaRouter.match("/goods/**", r -> StpUtil.checkPermission("goods"));
SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders")); SaRouter.match("/orders/**", r -> StpUtil.checkPermission("orders"));
// ... // 更多匹配 ... */
}) })
// 异常处理方法每次setAuth函数出现异常时进入 // 异常处理方法每次setAuth函数出现异常时进入
.setError(e -> { .setError(e -> {

View File

@@ -23,6 +23,8 @@ Sa-Token提供两种解决方案
##### 1、引入依赖 ##### 1、引入依赖
在网关处引入的依赖为(此处以 SpringCloud Gateway 为例): 在网关处引入的依赖为(此处以 SpringCloud Gateway 为例):
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证Reactor响应式集成, 在线文档http://sa-token.dev33.cn/ --> <!-- Sa-Token 权限认证Reactor响应式集成, 在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
@@ -30,7 +32,8 @@ Sa-Token提供两种解决方案
<artifactId>sa-token-reactor-spring-boot-starter</artifactId> <artifactId>sa-token-reactor-spring-boot-starter</artifactId>
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
<!-- Sa-Token 整合 Redis (使用jackson序列化方式) -->
<!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId> <artifactId>sa-token-dao-redis-jackson</artifactId>
@@ -41,8 +44,20 @@ Sa-Token提供两种解决方案
<artifactId>commons-pool2</artifactId> <artifactId>commons-pool2</artifactId>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证Reactor响应式集成在线文档http://sa-token.dev33.cn/
implementation 'cn.dev33:sa-token-reactor-spring-boot-starter:${sa.top.version}'
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
implementation 'cn.dev33:sa-token-dao-redis-jackson:${sa.top.version}'
implementation 'org.apache.commons:commons-pool2'
```
<!---------------------------- tabs:end ------------------------------>
在子服务引入的依赖为: 在子服务引入的依赖为:
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ --> <!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
@@ -50,7 +65,8 @@ Sa-Token提供两种解决方案
<artifactId>sa-token-spring-boot-starter</artifactId> <artifactId>sa-token-spring-boot-starter</artifactId>
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
<!-- Sa-Token 整合 Redis (使用jackson序列化方式) -->
<!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId> <artifactId>sa-token-dao-redis-jackson</artifactId>
@@ -61,6 +77,16 @@ Sa-Token提供两种解决方案
<artifactId>commons-pool2</artifactId> <artifactId>commons-pool2</artifactId>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证在线文档http://sa-token.dev33.cn/
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
implementation 'cn.dev33:sa-token-dao-redis-jackson:${sa.top.version}'
implementation 'org.apache.commons:commons-pool2'
```
<!---------------------------- tabs:end ------------------------------>
##### 2、网关处添加Id-Token ##### 2、网关处添加Id-Token

View File

@@ -7,25 +7,41 @@
> **在微服务架构中使用Sa-Token时网关和内部服务要分开引入Sa-Token依赖不要直接在顶级父pom中引入Sa-Token** > **在微服务架构中使用Sa-Token时网关和内部服务要分开引入Sa-Token依赖不要直接在顶级父pom中引入Sa-Token**
总体来讲,我们需要关注的依赖就是两个:`sa-token-spring-boot-starter``sa-token-reactor-spring-boot-starter` 总体来讲,我们需要关注的依赖就是两个:`sa-token-spring-boot-starter``sa-token-reactor-spring-boot-starter`
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ --> <!-- Sa-Token 权限认证在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId> <artifactId>sa-token-spring-boot-starter</artifactId>
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证在线文档http://sa-token.dev33.cn/
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
```
<!---------------------------- tabs:end ---------------------------->
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证Reactor响应式集成, 在线文档http://sa-token.dev33.cn/ --> <!-- Sa-Token 权限认证Reactor响应式集成在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-reactor-spring-boot-starter</artifactId> <artifactId>sa-token-reactor-spring-boot-starter</artifactId>
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证Reactor响应式集成在线文档http://sa-token.dev33.cn/
implementation 'cn.dev33:sa-token-reactor-spring-boot-starter:${sa.top.version}'
```
<!---------------------------- tabs:end ------------------------------>
至于怎么分辨我们需要引入哪个呢?这个要看你使用的基础框架: 至于怎么分辨我们需要引入哪个呢?这个要看你使用的基础框架:
@@ -40,8 +56,11 @@
注:切不可直接在一个项目里同时引入这两个依赖,否则会造成项目无法启动 注:切不可直接在一个项目里同时引入这两个依赖,否则会造成项目无法启动
另外我们需要引入Redis集成包因为我们的网关和子服务主要通过Redis来同步数据 另外我们需要引入Redis集成包因为我们的网关和子服务主要通过Redis来同步数据
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 整合 Redis (使用jackson序列化方式) --> <!-- Sa-Token 整合 Redis 使用 jackson 序列化方式 -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId> <artifactId>sa-token-dao-redis-jackson</artifactId>
@@ -52,6 +71,14 @@
<artifactId>commons-pool2</artifactId> <artifactId>commons-pool2</artifactId>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
implementation 'cn.dev33:sa-token-dao-redis-jackson:${sa.top.version}'
implementation 'org.apache.commons:commons-pool2'
```
<!---------------------------- tabs:end ------------------------------>
详细参考:[集成 Redis](/up/integ-redis) 详细参考:[集成 Redis](/up/integ-redis)

View File

@@ -13,6 +13,8 @@
### 2、引入依赖 ### 2、引入依赖
创建SpringBoot项目 `sa-token-demo-oauth2-server`不会的同学自行百度或参考仓库示例添加pom依赖 创建SpringBoot项目 `sa-token-demo-oauth2-server`不会的同学自行百度或参考仓库示例添加pom依赖
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ --> <!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
@@ -28,6 +30,17 @@
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证在线文档http://sa-token.dev33.cn/
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
// Sa-Token-OAuth2.0 模块
implementation 'cn.dev33:sa-token-oauth2:${sa.top.version}'
```
<!---------------------------- tabs:end ---------------------------->
### 3、开放服务 ### 3、开放服务
1、新建 `SaOAuth2TemplateImpl` 1、新建 `SaOAuth2TemplateImpl`

View File

@@ -16,6 +16,8 @@ Sa-Token默认的Redis集成方式会把权限数据和业务缓存放在一起
### 1、首先引入Alone-Redis依赖 ### 1、首先引入Alone-Redis依赖
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token插件权限缓存与业务缓存分离 --> <!-- Sa-Token插件权限缓存与业务缓存分离 -->
<dependency> <dependency>
@@ -24,11 +26,21 @@ Sa-Token默认的Redis集成方式会把权限数据和业务缓存放在一起
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
implementation 'cn.dev33:sa-token-alone-redis:${sa.top.version}'
```
<!---------------------------- tabs:end ---------------------------->
### 2、然后在application.yml中增加配置 ### 2、然后在application.yml中增加配置
``` yml
# Sa-Token配置 <!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
# Sa-Token 配置
sa-token: sa-token:
# Token名称 # Token名称
token-name: satoken token-name: satoken
@@ -65,6 +77,45 @@ spring:
timeout: 10s timeout: 10s
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
############## Sa-Token 配置 ##############
# Token名称
sa-token.token-name=satoken
# Token有效期
sa-token.timeout=2592000
# Token风格
sa-token.token-style=uuid
############## 配置 Sa-Token 单独使用的 Redis 连接 ##############
# Redis数据库索引默认为0
sa-token.alone-redis.database=2
# Redis服务器地址
sa-token.alone-redis.host=127.0.0.1
# Redis服务器连接端口
sa-token.alone-redis.port=6379
# Redis服务器连接密码默认为空
sa-token.alone-redis.password=
# 连接超时时间
sa-token.alone-redis.timeout=10s
############## 配置业务使用的 Redis 连接 ##############
# Redis数据库索引默认为0
spring.redis.database=0
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码默认为空
spring.redis.password=
# 连接超时时间
spring.redis.timeout=10s
```
<!---------------------------- tabs:end ---------------------------->
具体可参考示例:[码云application.yml](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-alone-redis/src/main/resources/application.yml) 具体可参考示例:[码云application.yml](https://gitee.com/dromara/sa-token/blob/master/sa-token-demo/sa-token-demo-alone-redis/src/main/resources/application.yml)

View File

@@ -6,14 +6,22 @@
因此Sa-Token提供AOP插件你只需在`pom.xml`里添加如下依赖,便可以在任意层级使用注解鉴权 因此Sa-Token提供AOP插件你只需在`pom.xml`里添加如下依赖,便可以在任意层级使用注解鉴权
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token整合SpringAOP实现注解鉴权 --> <!-- Sa-Token 整合 SpringAOP 实现注解鉴权 -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-aop</artifactId> <artifactId>sa-token-spring-aop</artifactId>
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 整合 SpringAOP 实现注解鉴权
implementation 'cn.dev33:sa-token-spring-aop:${sa.top.version}'
```
<!---------------------------- tabs:end ------------------------------>
#### 注意点: #### 注意点:

View File

@@ -25,6 +25,8 @@ RPC 模式的调用,可以让我们像调用本地方法一样完成服务通
在项目已经引入 Dubbo 的基础上继续添加依赖Consumer 端和 Provider 端都需要引入): 在项目已经引入 Dubbo 的基础上继续添加依赖Consumer 端和 Provider 端都需要引入):
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 整合 Dubbo --> <!-- Sa-Token 整合 Dubbo -->
<dependency> <dependency>
@@ -33,6 +35,13 @@ RPC 模式的调用,可以让我们像调用本地方法一样完成服务通
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 整合 Dubbo
implementation 'cn.dev33:sa-token-context-dubbo:${sa.top.version}'
```
<!---------------------------- tabs:end ---------------------------->
然后我们就可以愉快的做到以下事情: 然后我们就可以愉快的做到以下事情:
@@ -64,11 +73,19 @@ RPC 模式的调用,可以让我们像调用本地方法一样完成服务通
直接在 `application.yml` 配置即可: 直接在 `application.yml` 配置即可:
``` yml <!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
# 打开 RPC 调用鉴权 # 打开 RPC 调用鉴权
check-id-token: true check-id-token: true
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# 打开 RPC 调用鉴权
sa-token.check-id-token=true
```
<!---------------------------- tabs:end ---------------------------->
##### 方式二、自建 Dubbo 过滤器校验 ##### 方式二、自建 Dubbo 过滤器校验

View File

@@ -19,6 +19,8 @@
### 引入插件 ### 引入插件
需要springboot环境添加依赖调用端和被调用端都需要引入 需要springboot环境添加依赖调用端和被调用端都需要引入
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 整合 grpc --> <!-- Sa-Token 整合 grpc -->
<dependency> <dependency>
@@ -27,13 +29,28 @@
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 整合 grpc
implementation 'cn.dev33:sa-token-context-grpc:${sa.top.version}'
```
<!---------------------------- tabs:end ---------------------------->
--- ---
### 开启id-token校验 ### 开启id-token校验
直接在 `application.yml` 配置即可: 直接在 `application.yml` 配置即可:
``` yml <!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
# 打开 RPC 调用鉴权 # 打开 RPC 调用鉴权
check-id-token: true check-id-token: true
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# 打开 RPC 调用鉴权
sa-token.check-id-token=true
```
<!---------------------------- tabs:end ---------------------------->

View File

@@ -7,6 +7,8 @@
### 1、引入依赖 ### 1、引入依赖
首先在项目已经引入 Sa-Token 的基础上,继续添加: 首先在项目已经引入 Sa-Token 的基础上,继续添加:
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 整合 jwt --> <!-- Sa-Token 整合 jwt -->
<dependency> <dependency>
@@ -15,15 +17,33 @@
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
> 注意: sa-token-jwt 显式依赖 hutool-all 5.7.14 版本,意味着:你的项目中要么不引入 Hutool要么引入版本 >= 5.7.14 的 Hutool 版本 <!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 整合 jwt
implementation 'cn.dev33:sa-token-jwt:${sa.top.version}'
```
<!---------------------------- tabs:end ---------------------------->
> 注意: sa-token-jwt 显式依赖 hutool-jwt 5.7.14 版本,意味着:你的项目中要么不引入 Hutool要么引入版本 >= 5.7.14 的 Hutool 版本
### 2、配置秘钥 ### 2、配置秘钥
在 `application.yml` 配置文件中配置 jwt 生成秘钥: 在 `application.yml` 配置文件中配置 jwt 生成秘钥:
``` yml
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
# jwt秘钥 # jwt秘钥
jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# jwt秘钥
sa-token.jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk
```
<!---------------------------- tabs:end ---------------------------->
注:为了安全起见请不要直接复制官网示例这个字符串(随便按几个字符就好了) 注:为了安全起见请不要直接复制官网示例这个字符串(随便按几个字符就好了)

View File

@@ -44,6 +44,9 @@ Sa-Token-Quick-Login的定位是这样的场景你的项目需要一个登录
首先我们需要创建一个SpringBoot的demo项目比如`sa-token-demo-quick-login` 首先我们需要创建一个SpringBoot的demo项目比如`sa-token-demo-quick-login`
##### 1、添加pom依赖 ##### 1、添加pom依赖
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token-Quick-Login 插件 --> <!-- Sa-Token-Quick-Login 插件 -->
<dependency> <dependency>
@@ -52,6 +55,14 @@ Sa-Token-Quick-Login的定位是这样的场景你的项目需要一个登录
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token-Quick-Login 插件
implementation 'cn.dev33:sa-token-quick-login:${sa.top.version}'
```
<!---------------------------- tabs:end ------------------------------>
##### 2、启动类 ##### 2、启动类
``` java ``` java
@@ -98,7 +109,11 @@ public class TestController {
### 可配置信息 ### 可配置信息
你可以在yml中添加如下配置 (所有配置都是可选的) 你可以在yml中添加如下配置 (所有配置都是可选的)
``` java
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
# Sa-Token-Quick-Login 配置 # Sa-Token-Quick-Login 配置
sa: sa:
# 登录账号 # 登录账号
@@ -116,9 +131,33 @@ sa:
# 指定拦截路径 # 指定拦截路径
# include: /** # include: /**
# 指定排除路径 # 指定排除路径
# exclude: /sss,/fff # exclude: /1.jpg
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
####### Sa-Token-Quick-Login 配置 #######
# 登录账号
sa.name=sa
# 登录密码
sa.pwd=123456
# 是否自动随机生成账号密码 (此项为true时, name与pwd失效)
sa.auto=false
# 是否开启全局认证(关闭后将不再强行拦截)
sa.auth=true
# 登录页标题
sa.title=Sa-Token 登录
# 是否显示底部版权信息
sa.copr=true
# 指定拦截路径
# sa.include=/**
# 指定排除路径
# sa.exclude=/1.jpg
```
<!---------------------------- tabs:end ---------------------------->
<br> <br>
**注:**示例源码在`/sa-token-demo/sa-token-demo-quick-login`目录下,可结合源码查看学习 **注:**示例源码在`/sa-token-demo/sa-token-demo-quick-login`目录下,可结合源码查看学习

View File

@@ -59,6 +59,8 @@ SaTempUtil.deleteToken(token);
**[sa-token-temp]** 模块允许以JWT作为逻辑内核完成工作你只需要引入以下依赖所有上层API保持不变 **[sa-token-temp]** 模块允许以JWT作为逻辑内核完成工作你只需要引入以下依赖所有上层API保持不变
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
@@ -66,6 +68,12 @@ SaTempUtil.deleteToken(token);
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
implementation 'cn.dev33:sa-token-temp-jwt:${sa.top.version}'
```
<!---------------------------- tabs:end ------------------------------>
并在配置文件中配置上jwt秘钥 **`(必填!)`** 并在配置文件中配置上jwt秘钥 **`(必填!)`**
``` java ``` java

View File

@@ -7,6 +7,8 @@
### 1、引入依赖 ### 1、引入依赖
首先我们确保项目已经引入 Thymeleaf 依赖,然后在此基础上继续添加: 首先我们确保项目已经引入 Thymeleaf 依赖,然后在此基础上继续添加:
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- 在 thymeleaf 标签中使用 Sa-Token --> <!-- 在 thymeleaf 标签中使用 Sa-Token -->
<dependency> <dependency>
@@ -15,6 +17,13 @@
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// 在 thymeleaf 标签中使用 Sa-Token
implementation 'cn.dev33:sa-token-dialect-thymeleaf:${sa.top.version}'
```
<!---------------------------- tabs:end ---------------------------->
### 2、注册标签方言对象 ### 2、注册标签方言对象

View File

@@ -21,7 +21,23 @@
造成此漏洞的直接原因就是SSO-Server认证中心没有对 `redirect地址` 进行任何的限制,防范的方法也很简单,就是对`redirect参数`进行校验如果其不在指定的URL列表中时拒绝下放ticket 造成此漏洞的直接原因就是SSO-Server认证中心没有对 `redirect地址` 进行任何的限制,防范的方法也很简单,就是对`redirect参数`进行校验如果其不在指定的URL列表中时拒绝下放ticket
我们将其配置为一个具体的URL`allow-url=http://sa-sso-client1.com:9001/sso/login`,再次访问上述连接: 我们将其配置为一个具体的URL
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token:
sso:
# 配置允许单点登录的 url
allow-url: http://sa-sso-client1.com:9001/sso/login
```
<!------------- tab:properties 风格 ------------->
``` properties
# 配置允许单点登录的 url
sa-token.sso.allow-url=http://sa-sso-client1.com:9001/sso/login
```
<!---------------------------- tabs:end ---------------------------->
再次访问上述链接:
![sso-feifa-rf](https://oss.dev33.cn/sa-token/doc/sso/sso-feifa-rf.png 's-w-sh') ![sso-feifa-rf](https://oss.dev33.cn/sa-token/doc/sso/sso-feifa-rf.png 's-w-sh')

View File

@@ -118,12 +118,21 @@ public class H5Controller {
复制上述地址,将其配置到 Client 端的 yml 配置文件中,例如: 复制上述地址,将其配置到 Client 端的 yml 配置文件中,例如:
``` yml <!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
sso: sso:
# SSO-Server端 统一认证地址 # SSO-Server端 统一认证地址
auth-url: http://127.0.0.1:8848/sa-token-demo-sso-server-h5/sso-auth.html auth-url: http://127.0.0.1:8848/sa-token-demo-sso-server-h5/sso-auth.html
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# SSO-Server端 统一认证地址
sa-token.sso.auth-url=http://127.0.0.1:8848/sa-token-demo-sso-server-h5/sso-auth.html
```
<!---------------------------- tabs:end ---------------------------->
然后我们启动项目 `sa-token-demo-sso-server` 与 `sa-token-demo-sso2-client`,按照之前的测试步骤访问: 然后我们启动项目 `sa-token-demo-sso-server` 与 `sa-token-demo-sso2-client`,按照之前的测试步骤访问:
[http://sa-sso-client1.com:9001/](http://sa-sso-client1.com:9001/),即可以前后端分离模式完成 SSO-Server 端的授权登录。 [http://sa-sso-client1.com:9001/](http://sa-sso-client1.com:9001/),即可以前后端分离模式完成 SSO-Server 端的授权登录。

View File

@@ -9,8 +9,10 @@
### 1、添加依赖 ### 1、添加依赖
创建 SpringBoot 项目 `sa-token-demo-sso-server`,引入依赖: 创建 SpringBoot 项目 `sa-token-demo-sso-server`,引入依赖:
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ --> <!-- Sa-Token 权限认证在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId> <artifactId>sa-token-spring-boot-starter</artifactId>
@@ -48,6 +50,27 @@
<version>3.1.1</version> <version>3.1.1</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证在线文档http://sa-token.dev33.cn/
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
// Sa-Token 插件整合SSO
implementation 'cn.dev33:sa-token-sso:${sa.top.version}'
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
implementation 'cn.dev33:sa-token-dao-redis-jackson:${sa.top.version}'
implementation 'org.apache.commons:commons-pool2'
// 视图引擎(在前后端不分离模式下提供视图支持)
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
// Http请求工具在模式三的单点注销功能下用到如不需要可以注释掉
implementation 'com.ejlchina:okhttps:3.1.1'
```
<!---------------------------- tabs:end ---------------------------->
除了 `sa-token-spring-boot-starter` 和 `sa-token-sso` 以外,其它包都是可选的: 除了 `sa-token-spring-boot-starter` 和 `sa-token-sso` 以外,其它包都是可选的:
- 在 SSO 模式三时 Redis 相关包是可选的 - 在 SSO 模式三时 Redis 相关包是可选的
@@ -133,6 +156,10 @@ public class GlobalExceptionHandler {
### 3、application.yml配置 ### 3、application.yml配置
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yml ``` yml
# 端口 # 端口
server: server:
@@ -140,9 +167,9 @@ server:
# Sa-Token 配置 # Sa-Token 配置
sa-token: sa-token:
# -------------- SSO-模式一相关配置 (非模式一不需要配置) # ------- SSO-模式一相关配置 (非模式一不需要配置)
# cookie: # cookie:
# 配置Cookie作用域 # 配置 Cookie 作用域
# domain: stp.com # domain: stp.com
# ------- SSO-模式二相关配置 # ------- SSO-模式二相关配置
@@ -154,7 +181,7 @@ sa-token:
# 是否打开单点注销功能 # 是否打开单点注销功能
is-slo: true is-slo: true
# ------- SSO-模式三相关配置 下面的配置在SSO模式三并且 is-slo=true 时打开) ------- # ------- SSO-模式三相关配置 下面的配置在SSO模式三并且 is-slo=true 时打开)
# 是否打开模式三 # 是否打开模式三
isHttp: true isHttp: true
# 接口调用秘钥用于SSO模式三的单点注销功能 # 接口调用秘钥用于SSO模式三的单点注销功能
@@ -173,8 +200,46 @@ spring:
# Redis服务器连接密码默认为空 # Redis服务器连接密码默认为空
password: password:
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# 端口
server.port=9000
注意点:`allow-url`为了方便测试配置为`*`线上生产环境一定要配置为详细URL地址 (之后的章节我们会详细阐述此配置项) ################## Sa-Token 配置 ##################
# ------- SSO-模式一相关配置 (非模式一不需要配置)
# 配置 Cookie 作用域
# sa-token.cookie.domain=stp.com
# ------- SSO-模式二相关配置
# Ticket有效期 (单位: 秒),默认五分钟
sa-token.sso.ticket-timeout=300
# 所有允许的授权回调地址
sa-token.sso.allow-url=*
# 是否打开单点注销功能
sa-token.sso.is-slo=true
# ------- SSO-模式三相关配置 下面的配置在SSO模式三并且 is-slo=true 时打开)
# 是否打开模式三
sa-token.sso.isHttp=true
# 接口调用秘钥用于SSO模式三的单点注销功能
sa-token.sso.secretkey=kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
# ---- 除了以上配置项,你还需要为 Sa-Token 配置http请求处理器文档有步骤说明
################## Redis配置 SSO模式一和模式二使用Redis来同步会话 ##################
# Redis数据库索引默认为0
spring.redis.database=1
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码默认为空
spring.redis.password=
```
<!---------------------------- tabs:end ---------------------------->
注意点:`sa-token.sso.allow-url`为了方便测试配置为`*`线上生产环境一定要配置为详细URL地址 (之后的章节我们会详细阐述此配置项)
### 4、创建启动类 ### 4、创建启动类

View File

@@ -41,12 +41,20 @@ OK所有理论就绪下面开始实战
### 3、指定Cookie的作用域 ### 3、指定Cookie的作用域
在`sso.stp.com`访问服务器其Cookie也只能写入到`sso.stp.com`下为了将Cookie写入到其父级域名`stp.com`下,我们需要更改 SSO-Server 端的 yml 配置: 在`sso.stp.com`访问服务器其Cookie也只能写入到`sso.stp.com`下为了将Cookie写入到其父级域名`stp.com`下,我们需要更改 SSO-Server 端的 yml 配置:
``` yml <!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
cookie: cookie:
# 配置Cookie作用域 # 配置 Cookie 作用域
domain: stp.com domain: stp.com
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# 配置 Cookie 作用域
sa-token.cookie.domain=stp.com
```
<!---------------------------- tabs:end ---------------------------->
这个配置原本是被注释掉的,现在将其打开。另外我们格外需要注意: 这个配置原本是被注释掉的,现在将其打开。另外我们格外需要注意:
在SSO模式一测试完毕之后一定要将这个配置再次注释掉因为模式一与模式二三使用不同的授权流程这行配置会影响到我们模式二和模式三的正常运行。 在SSO模式一测试完毕之后一定要将这个配置再次注释掉因为模式一与模式二三使用不同的授权流程这行配置会影响到我们模式二和模式三的正常运行。
@@ -62,12 +70,14 @@ sa-token:
#### 4.1、引入依赖 #### 4.1、引入依赖
新建项目 sa-token-demo-sso1-client并添加以下依赖 新建项目 sa-token-demo-sso1-client并添加以下依赖
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ --> <!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId> <artifactId>sa-token-spring-boot-starter</artifactId>
<version>${sa-token-version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
<!-- Sa-Token 插件整合SSO --> <!-- Sa-Token 插件整合SSO -->
<dependency> <dependency>
@@ -80,7 +90,7 @@ sa-token:
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-dao-redis-jackson</artifactId> <artifactId>sa-token-dao-redis-jackson</artifactId>
<version>${sa-token-version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
<dependency> <dependency>
<groupId>org.apache.commons</groupId> <groupId>org.apache.commons</groupId>
@@ -91,9 +101,25 @@ sa-token:
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-alone-redis</artifactId> <artifactId>sa-token-alone-redis</artifactId>
<version>${sa-token-version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证在线文档http://sa-token.dev33.cn/
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
// Sa-Token 插件整合SSO
implementation 'cn.dev33:sa-token-sso:${sa.top.version}'
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
implementation 'cn.dev33:sa-token-dao-redis-jackson:${sa.top.version}'
implementation 'org.apache.commons:commons-pool2'
// Sa-Token插件权限缓存与业务缓存分离
implementation 'cn.dev33:sa-token-alone-redis:${sa.top.version}'
```
<!---------------------------- tabs:end ---------------------------->
#### 4.2、新建 Controller 控制器 #### 4.2、新建 Controller 控制器
@@ -130,12 +156,14 @@ public class SsoClientController {
#### 4.3、application.yml 配置 #### 4.3、application.yml 配置
``` yml <!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
# 端口 # 端口
server: server:
port: 9001 port: 9001
# sa-token配置 # Sa-Token 配置
sa-token: sa-token:
# SSO-相关配置 # SSO-相关配置
sso: sso:
@@ -144,7 +172,7 @@ sa-token:
# SSO-Server端-单点注销地址 # SSO-Server端-单点注销地址
slo-url: http://sso.stp.com:9000/sso/logout slo-url: http://sso.stp.com:9000/sso/logout
# 配置Sa-Token单独使用的Redis连接 此处需要和SSO-Server端连接同一个Redis # 配置 Sa-Token 单独使用的Redis连接 此处需要和SSO-Server端连接同一个Redis
alone-redis: alone-redis:
# Redis数据库索引 # Redis数据库索引
database: 1 database: 1
@@ -157,6 +185,32 @@ sa-token:
# 连接超时时间 # 连接超时时间
timeout: 10s timeout: 10s
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# 端口
server.port=9001
######### Sa-Token 配置 #########
# SSO-Server端-单点登录授权地址
sa-token.sso.auth-url=http://sso.stp.com:9000/sso/auth
# SSO-Server端-单点注销地址
sa-token.sso.slo-url=http://sso.stp.com:9000/sso/logout
# 配置 Sa-Token 单独使用的Redis连接 此处需要和SSO-Server端连接同一个Redis
# Redis数据库索引
sa-token.alone-redis.database=1
# Redis服务器地址
sa-token.alone-redis.host=127.0.0.1
# Redis服务器连接端口
sa-token.alone-redis.port=6379
# Redis服务器连接密码默认为空
sa-token.alone-redis.password=
# 连接超时时间
sa-token.alone-redis.timeout=10s
```
<!---------------------------- tabs:end ---------------------------->
#### 4.4、启动类 #### 4.4、启动类

View File

@@ -49,19 +49,28 @@
#### 3.1、去除 SSO-Server 的 Cookie 作用域配置 #### 3.1、去除 SSO-Server 的 Cookie 作用域配置
在SSO模式一章节中我们打开了配置 在SSO模式一章节中我们打开了配置
<!---------------------------- tabs:start ---------------------------->
``` yml <!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
cookie: cookie:
# 配置Cookie作用域 # 配置 Cookie 作用域
domain: stp.com domain: stp.com
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# 配置 Cookie 作用域
sa-token.cookie.domain=stp.com
```
<!---------------------------- tabs:end ---------------------------->
此为模式一专属配置,现在我们将其注释掉,并按照注释提示打开其他相应的注释 此为模式一专属配置,现在我们将其注释掉
#### 3.2、创建 SSO-Client 端项目 #### 3.2、创建 SSO-Client 端项目
创建一个 SpringBoot 项目 `sa-token-demo-sso-client`,引入依赖: 创建一个 SpringBoot 项目 `sa-token-demo-sso2-client`,引入依赖:
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ --> <!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
@@ -94,6 +103,22 @@ sa-token:
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证在线文档http://sa-token.dev33.cn/
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
// Sa-Token 插件整合SSO
implementation 'cn.dev33:sa-token-sso:${sa.top.version}'
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
implementation 'cn.dev33:sa-token-dao-redis-jackson:${sa.top.version}'
implementation 'org.apache.commons:commons-pool2'
// Sa-Token插件权限缓存与业务缓存分离
implementation 'cn.dev33:sa-token-alone-redis:${sa.top.version}'
```
<!---------------------------- tabs:end ---------------------------->
#### 3.3、创建 SSO-Client 端认证接口 #### 3.3、创建 SSO-Client 端认证接口
@@ -134,7 +159,10 @@ public class SsoClientController {
##### 3.4、配置SSO认证中心地址 ##### 3.4、配置SSO认证中心地址
你需要在 `application.yml` 配置如下信息: 你需要在 `application.yml` 配置如下信息:
``` yml
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
# 端口 # 端口
server: server:
port: 9001 port: 9001
@@ -158,7 +186,35 @@ sa-token:
port: 6379 port: 6379
# Redis服务器连接密码默认为空 # Redis服务器连接密码默认为空
password: password:
# 连接超时时间
timeout: 10s
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# 端口
server.port=9001
######### Sa-Token 配置 #########
# SSO-Server端 统一认证地址
sa-token.sso.auth-url=http://sa-sso-server.com:9000/sso/auth
# 是否打开单点注销接口
sa-token.sso.is-slo=true
# 配置 Sa-Token 单独使用的Redis连接 此处需要和SSO-Server端连接同一个Redis
# Redis数据库索引
sa-token.alone-redis.database=1
# Redis服务器地址
sa-token.alone-redis.host=127.0.0.1
# Redis服务器连接端口
sa-token.alone-redis.port=6379
# Redis服务器连接密码默认为空
sa-token.alone-redis.password=
# 连接超时时间
sa-token.alone-redis.timeout=10s
```
<!---------------------------- tabs:end ---------------------------->
注意点:`sa-token.alone-redis` 的配置需要和SSO-Server端连接同一个Redisdatabase也要一样 注意点:`sa-token.alone-redis` 的配置需要和SSO-Server端连接同一个Redisdatabase也要一样
#### 3.5、写启动类 #### 3.5、写启动类

View File

@@ -21,6 +21,9 @@
### 2、在Client 端更改 Ticket 校验方式 ### 2、在Client 端更改 Ticket 校验方式
#### 2.1、增加 pom.xml 配置 #### 2.1、增加 pom.xml 配置
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Http请求工具 --> <!-- Http请求工具 -->
<dependency> <dependency>
@@ -29,6 +32,14 @@
<version>3.1.1</version> <version>3.1.1</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Http请求工具
implementation 'com.ejlchina:okhttps:3.1.1'
```
<!---------------------------- tabs:end ---------------------------->
> OkHttps是一个轻量级http请求工具详情参考[OkHttps](https://gitee.com/ejlchina-zhxu/okhttps) > OkHttps是一个轻量级http请求工具详情参考[OkHttps](https://gitee.com/ejlchina-zhxu/okhttps)
#### 2.2、配置 http 请求处理器 #### 2.2、配置 http 请求处理器
@@ -48,7 +59,10 @@ private void configSso(SaSsoConfig sso) {
``` ```
#### 2.3、application.yml 新增配置 #### 2.3、application.yml 新增配置
``` yml
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
sso: sso:
# 打开模式三使用Http请求校验ticket # 打开模式三使用Http请求校验ticket
@@ -56,6 +70,14 @@ sa-token:
# SSO-Server端 ticket校验地址 # SSO-Server端 ticket校验地址
check-ticket-url: http://sa-sso-server.com:9000/sso/checkTicket check-ticket-url: http://sa-sso-server.com:9000/sso/checkTicket
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# 打开模式三使用Http请求校验ticket
sa-token.sso.is-http=true
# SSO-Server端 ticket校验地址
sa-token.sso.check-ticket-url=http://sa-sso-server.com:9000/sso/checkTicket
```
<!---------------------------- tabs:end ---------------------------->
#### 2.4、启动项目测试 #### 2.4、启动项目测试
重启项目,访问测试:[http://sa-sso-client1.com:9001/](http://sa-sso-client1.com:9001/) 重启项目,访问测试:[http://sa-sso-client1.com:9001/](http://sa-sso-client1.com:9001/)
@@ -87,13 +109,23 @@ public Object userinfo(String loginId) {
``` ```
#### 3.2、在 Client 端调用此接口查询 userinfo #### 3.2、在 Client 端调用此接口查询 userinfo
首先在yml中配置接口地址 首先在 application.yml 中配置接口地址
``` yml <!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
sso: sso:
# SSO-Server端 查询userinfo地址 # SSO-Server端 查询userinfo地址
userinfo-url: http://sa-sso-server.com:9000/sso/userinfo userinfo-url: http://sa-sso-server.com:9000/sso/userinfo
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# SSO-Server端 查询userinfo地址
sa-token.sso.userinfo-url=http://sa-sso-server.com:9000/sso/userinfo
```
<!---------------------------- tabs:end ---------------------------->
然后在`SsoClientController`中新增接口 然后在`SsoClientController`中新增接口
``` java ``` java
@@ -181,7 +213,10 @@ public Object myFollowList() {
#### 5.1、SSO-Client 端新增配置 #### 5.1、SSO-Client 端新增配置
在 `application.yml` 增加配置:`API调用秘钥` 和 `单点注销接口URL`。 在 `application.yml` 增加配置:`API调用秘钥` 和 `单点注销接口URL`。
``` yml
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
sso: sso:
# 打开单点注销功能 # 打开单点注销功能
@@ -191,6 +226,18 @@ sa-token:
# 接口调用秘钥 # 接口调用秘钥
secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# 打开单点注销功能
sa-token.sso.is-slo=true
# 单点注销地址
sa-token.sso.slo-url=http://sa-sso-server.com:9000/sso/logout
# 接口调用秘钥
sa-token.sso.secretkey=kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
```
<!---------------------------- tabs:end ---------------------------->
注意 secretkey 秘钥需要与SSO认证中心的一致 注意 secretkey 秘钥需要与SSO认证中心的一致

View File

@@ -105,42 +105,42 @@
## Gradle依赖 ## Gradle依赖
<!-- tabs:start --> <!-- tabs:start -->
<!-- tab:SpringBoot环境 ServletAPI --> <!-- tab:SpringBoot环境 ServletAPI -->
``` xml ``` gradle
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}' implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
``` ```
<!-- tab:WebFlux环境 Reactor --> <!-- tab:WebFlux环境 Reactor -->
``` xml ``` gradle
implementation 'cn.dev33:sa-token-reactor-spring-boot-starter:${sa.top.version}' implementation 'cn.dev33:sa-token-reactor-spring-boot-starter:${sa.top.version}'
``` ```
<!-- tab:Solon 集成 --> <!-- tab:Solon 集成 -->
``` xml ``` gradle
implementation 'cn.dev33:sa-token-solon-plugin:${sa.top.version}' implementation 'cn.dev33:sa-token-solon-plugin:${sa.top.version}'
``` ```
<!-- tab:JFinal 集成 --> <!-- tab:JFinal 集成 -->
``` xml ``` gradle
implementation 'cn.dev33:sa-token-jfinal-plugin:${sa.top.version}' implementation 'cn.dev33:sa-token-jfinal-plugin:${sa.top.version}'
``` ```
<!-- tab:Jboot 集成 --> <!-- tab:Jboot 集成 -->
``` xml ``` gradle
implementation 'cn.dev33:sa-token-jboot-plugin:${sa.top.version}' implementation 'cn.dev33:sa-token-jboot-plugin:${sa.top.version}'
``` ```
<!-- tab:Quarkus 集成 --> <!-- tab:Quarkus 集成 -->
``` xml ``` gradle
implementation 'io.quarkiverse.satoken:quarkus-satoken-resteasy:1.30.0' implementation 'io.quarkiverse.satoken:quarkus-satoken-resteasy:1.30.0'
``` ```
<!-- tab:裸Servlet容器环境 --> <!-- tab:裸Servlet容器环境 -->
``` xml ``` gradle
implementation 'cn.dev33:sa-token-servlet:${sa.top.version}' implementation 'cn.dev33:sa-token-servlet:${sa.top.version}'
``` ```
<!-- tab:其它 --> <!-- tab:其它 -->
``` xml ``` gradle
implementation 'cn.dev33:sa-token-core:${sa.top.version}' implementation 'cn.dev33:sa-token-core:${sa.top.version}'
``` ```

View File

@@ -11,16 +11,26 @@
### 2、添加依赖 ### 2、添加依赖
`pom.xml` 中添加依赖: 项目中添加依赖:
<!---------------------------- tabs:start ---------------------------->
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证, 在线文档http://sa-token.dev33.cn/ --> <!-- Sa-Token 权限认证在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId> <artifactId>sa-token-spring-boot-starter</artifactId>
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证在线文档http://sa-token.dev33.cn/
implementation 'cn.dev33:sa-token-spring-boot-starter:${sa.top.version}'
```
<!---------------------------- tabs:end ---------------------------->
更多内测版本了解:[Sa-Token最新版本](https://gitee.com/dromara/sa-token/blob/dev/sa-token-doc/start/new-version.md) 更多内测版本了解:[Sa-Token最新版本](https://gitee.com/dromara/sa-token/blob/dev/sa-token-doc/start/new-version.md)
Maven依赖一直无法加载成功[参考解决方案](https://sa-token.dev33.cn/doc.html#/start/maven-pull) Maven依赖一直无法加载成功[参考解决方案](https://sa-token.dev33.cn/doc.html#/start/maven-pull)
@@ -28,10 +38,10 @@ Maven依赖一直无法加载成功[参考解决方案](https://sa-token.dev3
### 3、设置配置文件 ### 3、设置配置文件
你可以**零配置启动项目** ,但同时你也可以在 `application.yml` 中增加如下配置,定制性使用框架: 你可以**零配置启动项目** ,但同时你也可以在 `application.yml` 中增加如下配置,定制性使用框架:
<!------------------------------ tabs:start ------------------------------> <!---------------------------- tabs:start ---------------------------->
<!------------- tab:application.yml 风格 -------------> <!------------- tab:application.yml 风格 ------------->
``` java ``` yaml
server: server:
# 端口 # 端口
port: 8081 port: 8081
@@ -55,7 +65,7 @@ sa-token:
``` ```
<!------------- tab:application.properties 风格 -------------> <!------------- tab:application.properties 风格 ------------->
``` java ``` properties
server: server:
# 端口 # 端口
port: 8081 port: 8081
@@ -78,7 +88,7 @@ sa-token.token-style=uuid
sa-token.is-log=false sa-token.is-log=false
``` ```
<!---------------------------- tabs:end ------------------------------> <!---------------------------- tabs:end ---------------------------->
### 4、创建启动类 ### 4、创建启动类

View File

@@ -14,16 +14,26 @@
### 2、添加依赖 ### 2、添加依赖
`pom.xml` 中添加依赖: 项目中添加依赖:
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 权限认证Reactor响应式集成, 在线文档http://sa-token.dev33.cn/ --> <!-- Sa-Token 权限认证Reactor响应式集成在线文档http://sa-token.dev33.cn/ -->
<dependency> <dependency>
<groupId>cn.dev33</groupId> <groupId>cn.dev33</groupId>
<artifactId>sa-token-reactor-spring-boot-starter</artifactId> <artifactId>sa-token-reactor-spring-boot-starter</artifactId>
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 权限认证Reactor响应式集成在线文档http://sa-token.dev33.cn/
implementation 'cn.dev33:sa-token-reactor-spring-boot-starter:${sa.top.version}'
```
<!---------------------------- tabs:end ------------------------------>
### 3、创建启动类 ### 3、创建启动类
@@ -54,7 +64,7 @@ public class SaTokenConfigure {
public SaReactorFilter getSaReactorFilter() { public SaReactorFilter getSaReactorFilter() {
return new SaReactorFilter() return new SaReactorFilter()
// 指定 [拦截路由] // 指定 [拦截路由]
.addInclude("/**") .addInclude("/**") /* 拦截所有path */
// 指定 [放行路由] // 指定 [放行路由]
.addExclude("/favicon.ico") .addExclude("/favicon.ico")
// 指定[认证函数]: 每次请求执行 // 指定[认证函数]: 每次请求执行

View File

@@ -106,7 +106,7 @@ body{font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu
.code-line-box {line-height: inherit !important; background-color: #191919; color: #aaa;font-weight: 400;font-size: 0.85em;text-align: center;} .code-line-box {line-height: inherit !important; background-color: #191919; color: #aaa;font-weight: 400;font-size: 0.85em;text-align: center;}
/* xml语言样式优化 */ /* xml语言样式优化 */
.lang-xml .token.comment{color: #CDAB53;} /* .lang-xml .token.comment{color: #CDAB53;} */
.lang-xml .token.tag *{color: #db2d20;} .lang-xml .token.tag *{color: #db2d20;}
.lang-xml .token.attr-value{color: #A6E22E;} .lang-xml .token.attr-value{color: #A6E22E;}
@@ -123,24 +123,23 @@ body{font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu
.lang-java .token.keyword{color: #db2d20;} .lang-java .token.keyword{color: #db2d20;}
.lang-java .token.namespace,.lang-java .token.namespace *{color: #01A252; opacity: 1;} .lang-java .token.namespace,.lang-java .token.namespace *{color: #01A252; opacity: 1;}
.lang-java .token.class-name,.lang-java .cm-variable{color: #55b5db; opacity: 1;} .lang-java .token.class-name,.lang-java .cm-variable{color: #55b5db; opacity: 1;}
.lang-java .token.comment{color: #CDAB53;} /* .lang-java .token.comment{color: #CDAB53;} */
.lang-java .token.annotation.punctuation{color: #ddd;} .lang-java .token.annotation.punctuation{color: #ddd;}
.lang-java .token.punctuation{color: #ddd;} .lang-java .token.punctuation{color: #ddd;}
/* yml语言样式优化 */ /* cmd语言样式优化 */
.main-box .lang-yml{color: #01A252 !important; opacity: 1;} .main-box .lang-cmd{color: #01A252 !important; opacity: 1;}
/* yml语言样式优化 */ /* url语言样式优化 */
.main-box .lang-url{color: #E96917 !important; opacity: 1;} .main-box .lang-url{color: #E96917 !important; opacity: 1;}
/* js语言样式优化 */ /* js语言样式优化 */
.main-box .lang-js{color: #01a252 !important;} .main-box .lang-js{color: #01a252 !important;}
.lang-js .token.comment{color: #CDAB53;} /* .lang-js .token.comment{color: #CDAB53;} */
/* .lang-js .token.string{color: #fded02;} */ /* .lang-js .token.string{color: #fded02;} */
.lang-js .token.string{color: #ddd;} .lang-js .token.string{color: #ddd;}
.lang-js .token.punctuation{color: #ddd;} .lang-js .token.punctuation{color: #ddd;}
/* .gt-container{padding: 1.5em; padding-bottom: 100px;} */
/* ------- markdown 内容样式优化 ------- */ /* ------- markdown 内容样式优化 ------- */
@@ -162,8 +161,14 @@ body{font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu
.gzh-table td b{display: block; margin-bottom: 10px; } .gzh-table td b{display: block; margin-bottom: 10px; }
/* tab选项卡优化 */ /* tab选项卡优化 */
/* .docsify-tabs--classic{background-color: rgba(255, 255, 255, 0.2);} */
.docsify-tabs__tab{outline: 0; cursor: pointer;} .docsify-tabs__tab{outline: 0; cursor: pointer;}
.docsify-tabs--classic .docsify-tabs__tab--active{box-shadow: 0 0 0;} .docsify-tabs--classic .docsify-tabs__tab--active{box-shadow: 0 0 0;}
/* tab卡片插件样式优化 */
.main-box{
--docsifytabs-border-color: #ddd;
--docsifytabs-tab-color: #777;
}
/* 调整表格的响应式 */ /* 调整表格的响应式 */
@@ -209,6 +214,7 @@ body {
#main .toc-box a{border-color: rgba(0,0,0,0); transition: 0s;} #main .toc-box a{border-color: rgba(0,0,0,0); transition: 0s;}
#main .toc-box a span{color: inherit;} #main .toc-box a span{color: inherit;}
/* 加载图片的按钮 */ /* 加载图片的按钮 */
.show-img{ .show-img{
background-color: #FFF; background-color: #FFF;

View File

@@ -0,0 +1 @@
!function(e){var n={pattern:/((?:^|[^\\$])(?:\\{2})*)\$(?:\w+|\{[^{}]*\})/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{?|\}$/,alias:"punctuation"},expression:{pattern:/[\s\S]+/,inside:null}}};e.languages.gradle=e.languages.extend("clike",{string:{pattern:/'''(?:[^\\]|\\[\s\S])*?'''|'(?:\\.|[^\\'\r\n])*'/,greedy:!0},keyword:/\b(?:apply|def|dependencies|else|if|implementation|import|plugin|plugins|project|repositories|repository|sourceSets|tasks|val)\b/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?\d+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(?:~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.\.(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),e.languages.insertBefore("gradle","string",{shebang:{pattern:/#!.+/,alias:"comment",greedy:!0},"interpolation-string":{pattern:/"""(?:[^\\]|\\[\s\S])*?"""|(["/])(?:\\.|(?!\1)[^\\\r\n])*\1|\$\/(?:[^/$]|\$(?:[/$]|(?![/$]))|\/(?!\$))*\/\$/,greedy:!0,inside:{interpolation:n,string:/[\s\S]+/}}}),e.languages.insertBefore("gradle","punctuation",{"spock-block":/\b(?:and|cleanup|expect|given|setup|then|when|where):/}),e.languages.insertBefore("gradle","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0,alias:"punctuation"}}),n.inside.expression.inside=e.languages.gradle}(Prism);

View File

@@ -0,0 +1 @@
!function(e){var n=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,t="(?:[a-z]\\w*\\s*\\.\\s*)*(?:[A-Z]\\w*\\s*\\.\\s*)*",s={pattern:RegExp("(^|[^\\w.])"+t+"[A-Z](?:[\\d_A-Z]*[a-z]\\w*)?\\b"),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[s,{pattern:RegExp("(^|[^\\w.])"+t+"[A-Z]\\w*(?=\\s+\\w+\\s*[;,=()]|\\s*(?:\\[[\\s,]*\\]\\s*)?::\\s*new\\b)"),lookbehind:!0,inside:s.inside},{pattern:RegExp("(\\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\\s+)"+t+"[A-Z]\\w*\\b"),lookbehind:!0,inside:s.inside}],keyword:n,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":s,keyword:n,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp("(\\bimport\\s+)"+t+"(?:[A-Z]\\w*|\\*)(?=\\s*;)"),lookbehind:!0,inside:{namespace:s.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp("(\\bimport\\s+static\\s+)"+t+"(?:\\w+|\\*)(?=\\s*;)"),lookbehind:!0,alias:"static",inside:{namespace:s.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp("(\\b(?:exports|import(?:\\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\\s+)(?!<keyword>)[a-z]\\w*(?:\\.[a-z]\\w*)*\\.?".replace(/<keyword>/g,(function(){return n.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(Prism);

View File

@@ -0,0 +1 @@
Prism.languages.properties={comment:/^[ \t]*[#!].*$/m,value:{pattern:/(^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?: *[=:] *(?! )| ))(?:\\(?:\r\n|[\s\S])|[^\\\r\n])+/m,lookbehind:!0,alias:"attr-value"},key:{pattern:/^[ \t]*(?:\\(?:\r\n|[\s\S])|[^\\\s:=])+(?= *[=:]| )/m,alias:"attr-name"},punctuation:/[=:]/};

View File

@@ -0,0 +1 @@
!function(e){var n=/[*&][^\s[\]{},]+/,r=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,t="(?:"+r.source+"(?:[ \t]+"+n.source+")?|"+n.source+"(?:[ \t]+"+r.source+")?)",a="(?:[^\\s\\x00-\\x08\\x0e-\\x1f!\"#%&'*,\\-:>?@[\\]`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*".replace(/<PLAIN>/g,(function(){return"[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]"})),d="\"(?:[^\"\\\\\r\n]|\\\\.)*\"|'(?:[^'\\\\\r\n]|\\\\.)*'";function o(e,n){n=(n||"").replace(/m/g,"")+"m";var r="([:\\-,[{]\\s*(?:\\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\\]|\\}|(?:[\r\n]\\s*)?#))".replace(/<<prop>>/g,(function(){return t})).replace(/<<value>>/g,(function(){return e}));return RegExp(r,n)}e.languages.yaml={scalar:{pattern:RegExp("([\\-:]\\s*(?:\\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\\S[^\r\n]*(?:\\2[^\r\n]+)*)".replace(/<<prop>>/g,(function(){return t}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp("((?:^|[:\\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\\s*:\\s)".replace(/<<prop>>/g,(function(){return t})).replace(/<<key>>/g,(function(){return"(?:"+a+"|"+d+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:o("\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?"),lookbehind:!0,alias:"number"},boolean:{pattern:o("false|true","i"),lookbehind:!0,alias:"important"},null:{pattern:o("null|~","i"),lookbehind:!0,alias:"important"},string:{pattern:o(d),lookbehind:!0,greedy:!0},number:{pattern:o("[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)","i"),lookbehind:!0},tag:r,important:n,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(Prism);

View File

@@ -23,7 +23,6 @@ Sa-Token同时提供过滤器和拦截器机制不是为了让谁替代谁
``` java ``` java
/** /**
* [Sa-Token 权限认证] 配置类 * [Sa-Token 权限认证] 配置类
* @author kong
*/ */
@Configuration @Configuration
public class SaTokenConfigure { public class SaTokenConfigure {
@@ -36,7 +35,7 @@ public class SaTokenConfigure {
return new SaServletFilter() return new SaServletFilter()
// 指定 拦截路由 与 放行路由 // 指定 拦截路由 与 放行路由
.addInclude("/**").addExclude("/favicon.ico") .addInclude("/**").addExclude("/favicon.ico") /* 排除掉 /favicon.ico */
// 认证函数: 每次请求执行 // 认证函数: 每次请求执行
.setAuth(obj -> { .setAuth(obj -> {
@@ -45,7 +44,7 @@ public class SaTokenConfigure {
// 登录认证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录 // 登录认证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
SaRouter.match("/**", "/user/doLogin", () -> StpUtil.checkLogin()); SaRouter.match("/**", "/user/doLogin", () -> StpUtil.checkLogin());
// 更多拦截处理方式,请参考“路由拦截式鉴权”章节 // 更多拦截处理方式,请参考“路由拦截式鉴权”章节 */
}) })
// 异常处理函数:每次认证函数发生异常时执行此函数 // 异常处理函数:每次认证函数发生异常时执行此函数
@@ -97,7 +96,6 @@ JSON 工具类可参考:[Hutool-Json](https://hutool.cn/docs/#/json/JSONUtil)
``` java ``` java
/** /**
* [Sa-Token 权限认证] 配置类 * [Sa-Token 权限认证] 配置类
* @author kong
*/ */
@Configuration @Configuration
public class SaTokenConfigure { public class SaTokenConfigure {

View File

@@ -14,6 +14,9 @@ Sa-Token 默认将数据保存在内存中,此模式读写速度最快,且
--- ---
### 方式1、Sa-Token 整合 Redis (使用 jdk 默认序列化方式) ### 方式1、Sa-Token 整合 Redis (使用 jdk 默认序列化方式)
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 整合 Redis (使用 jdk 默认序列化方式) --> <!-- Sa-Token 整合 Redis (使用 jdk 默认序列化方式) -->
<dependency> <dependency>
@@ -22,10 +25,20 @@ Sa-Token 默认将数据保存在内存中,此模式读写速度最快,且
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 整合 Redis (使用 jdk 默认序列化方式)
implementation 'cn.dev33:sa-token-dao-redis:${sa.top.version}'
```
<!---------------------------- tabs:end ------------------------------>
优点兼容性好缺点Session 序列化后基本不可读,对开发者来讲等同于乱码。 优点兼容性好缺点Session 序列化后基本不可读,对开发者来讲等同于乱码。
### 方式2、Sa-Token 整合 Redis使用 jackson 序列化方式) ### 方式2、Sa-Token 整合 Redis使用 jackson 序列化方式)
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) --> <!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
<dependency> <dependency>
@@ -34,6 +47,13 @@ Sa-Token 默认将数据保存在内存中,此模式读写速度最快,且
<version>${sa.top.version}</version> <version>${sa.top.version}</version>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
implementation 'cn.dev33:sa-token-dao-redis-jackson:${sa.top.version}'
```
<!---------------------------- tabs:end ------------------------------>
优点Session 序列化后可读性强,可灵活手动修改,缺点:兼容性稍差。 优点Session 序列化后可读性强,可灵活手动修改,缺点:兼容性稍差。
@@ -41,6 +61,9 @@ Sa-Token 默认将数据保存在内存中,此模式读写速度最快,且
**1. 无论使用哪种序列化方式,你都必须为项目提供一个 Redis 实例化方案,例如:** **1. 无论使用哪种序列化方式,你都必须为项目提供一个 Redis 实例化方案,例如:**
<!---------------------------- tabs:start ------------------------------>
<!-------- tab:Maven 方式 -------->
``` xml ``` xml
<!-- 提供Redis连接池 --> <!-- 提供Redis连接池 -->
<dependency> <dependency>
@@ -48,11 +71,20 @@ Sa-Token 默认将数据保存在内存中,此模式读写速度最快,且
<artifactId>commons-pool2</artifactId> <artifactId>commons-pool2</artifactId>
</dependency> </dependency>
``` ```
<!-------- tab:Gradle 方式 -------->
``` gradle
// Sa-Token 整合 Redis (使用 jackson 序列化方式)
implementation 'org.apache.commons:commons-pool2'
```
<!---------------------------- tabs:end ------------------------------>
**2. 引入了依赖,我还需要为 Redis 配置连接信息吗?** <br> **2. 引入了依赖,我还需要为 Redis 配置连接信息吗?** <br>
需要!只有项目初始化了正确的 Redis 实例,`Sa-Token`才可以使用 Redis 进行数据持久化,参考以下`yml配置` 需要!只有项目初始化了正确的 Redis 实例,`Sa-Token`才可以使用 Redis 进行数据持久化,参考以下`yml配置`
``` java
# 端口 <!---------------------------- tabs:start ------------------------------>
<!-------- tab:yaml 风格 -------->
``` yaml
spring: spring:
# redis配置 # redis配置
redis: redis:
@@ -77,6 +109,30 @@ spring:
# 连接池中的最小空闲连接 # 连接池中的最小空闲连接
min-idle: 0 min-idle: 0
``` ```
<!-------- tab:properties 风格 -------->
``` properties
# Redis数据库索引默认为0
spring.redis.database=1
# Redis服务器地址
spring.redis.host=127.0.0.1
# Redis服务器连接端口
spring.redis.port=6379
# Redis服务器连接密码默认为空
# spring.redis.password=
# 连接超时时间
spring.redis.timeout=10s
# 连接池最大连接数
spring.redis.lettuce.pool.max-active=200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
spring.redis.lettuce.pool.max-wait=-1ms
# 连接池中的最大空闲连接
spring.redis.lettuce.pool.max-idle=10
# 连接池中的最小空闲连接
spring.redis.lettuce.pool.min-idle=0
```
<!---------------------------- tabs:end ------------------------------>
**3. 集成 Redis 后,是我额外手动保存数据,还是框架自动保存?** <br> **3. 集成 Redis 后,是我额外手动保存数据,还是框架自动保存?** <br>

View File

@@ -13,11 +13,21 @@
此时后端如果不做任何特殊处理,框架将会把`Bearer `视为token的一部分无法正常读取token信息导致鉴权失败。 此时后端如果不做任何特殊处理,框架将会把`Bearer `视为token的一部分无法正常读取token信息导致鉴权失败。
为此我们需要在yml中添加如下配置 为此我们需要在yml中添加如下配置
``` java
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
sa-token: sa-token:
# token前缀 # token前缀
token-prefix: Bearer token-prefix: Bearer
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# token前缀
sa-token.token-prefix: Bearer
```
<!---------------------------- tabs:end ---------------------------->
此时 Sa-Token 便可在读取 Token 时裁剪掉 `Bearer`,成功获取`xxxx-xxxx-xxxx-xxxx`。 此时 Sa-Token 便可在读取 Token 时裁剪掉 `Bearer`,成功获取`xxxx-xxxx-xxxx-xxxx`。

View File

@@ -59,7 +59,7 @@ public class SaTokenConfigure {
``` ```
2、再次调用 `StpUtil.login(10001)`方法进行登录观察其生成的token样式: 2、再次调用 `StpUtil.login(10001)`方法进行登录观察其生成的token样式:
``` html ``` java
gfuPSwZsnUhwgz08GTCH4wOgasWtc3odP4HLwXJ7NDGOximTvT4OlW19zeLH gfuPSwZsnUhwgz08GTCH4wOgasWtc3odP4HLwXJ7NDGOximTvT4OlW19zeLH
``` ```

View File

@@ -6,10 +6,10 @@
### 方式1、在 application.yml 配置 ### 方式1、在 application.yml 配置
<!------------------------------ tabs:start ------------------------------> <!---------------------------- tabs:start ---------------------------->
<!------------- tab:application.yml 风格 -------------> <!------------- tab:yaml 风格 ------------->
``` java ``` yaml
############## Sa-Token 配置 ############## ############## Sa-Token 配置 ##############
############## 在线参考https://sa-token.dev33.cn/doc.html#/use/config ############## ############## 在线参考https://sa-token.dev33.cn/doc.html#/use/config ##############
sa-token: sa-token:
@@ -29,8 +29,8 @@ sa-token:
is-log: false is-log: false
``` ```
<!------------- tab:application.properties 风格 -------------> <!------------- tab:properties 风格 ------------->
``` java ``` properties
############## Sa-Token 配置 ############## ############## Sa-Token 配置 ##############
############## 在线参考https://sa-token.dev33.cn/doc.html#/use/config ############## ############## 在线参考https://sa-token.dev33.cn/doc.html#/use/config ##############
@@ -50,7 +50,7 @@ sa-token.token-style=uuid
sa-token.is-log=false sa-token.is-log=false
``` ```
<!---------------------------- tabs:end ------------------------------> <!---------------------------- tabs:end ---------------------------->
@@ -181,7 +181,10 @@ Client 端:
配置示例: 配置示例:
``` yml
<!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
# Sa-Token 配置 # Sa-Token 配置
sa-token: sa-token:
# SSO-相关配置 # SSO-相关配置
@@ -189,6 +192,13 @@ sa-token:
# SSO-Server端 单点登录授权地址 # SSO-Server端 单点登录授权地址
auth-url: http://sa-sso-server.com:9000/sso/auth auth-url: http://sa-sso-server.com:9000/sso/auth
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# SSO-Server端 单点登录授权地址
sa-token.sso.auth-url=http://sa-sso-server.com:9000/sso/auth
```
<!---------------------------- tabs:end ---------------------------->
@@ -207,7 +217,9 @@ sa-token:
| pastClientTokenTimeout | long | 7200 | `Past-Client-Token` 保存的时间(单位:秒) ,默认为-1代表延续 `Client-Token` 的有效时间 | | pastClientTokenTimeout | long | 7200 | `Past-Client-Token` 保存的时间(单位:秒) ,默认为-1代表延续 `Client-Token` 的有效时间 |
配置示例: 配置示例:
``` yml <!---------------------------- tabs:start ---------------------------->
<!------------- tab:yaml 风格 ------------->
``` yaml
# Sa-Token 配置 # Sa-Token 配置
sa-token: sa-token:
token-name: satoken-server token-name: satoken-server
@@ -218,6 +230,18 @@ sa-token:
is-password: true is-password: true
is-client: true is-client: true
``` ```
<!------------- tab:properties 风格 ------------->
``` properties
# Sa-Token 配置
sa-token.token-name=satoken-server
# OAuth2.0 配置
sa-token.oauth2.is-code=true
sa-token.oauth2.is-implicit=true
sa-token.oauth2.is-password=true
sa-token.oauth2.is-client=true
```
<!---------------------------- tabs:end ---------------------------->
##### SaClientModel属性定义 ##### SaClientModel属性定义
| 参数名称 | 类型 | 默认值 | 说明 | | 参数名称 | 类型 | 默认值 | 说明 |
@@ -300,30 +324,24 @@ sa-token:
在开发 SSO 模块时,我们需要在 sso-client 配置认证中心的各种地址,特别是在模式三下,一般代码会变成这样: 在开发 SSO 模块时,我们需要在 sso-client 配置认证中心的各种地址,特别是在模式三下,一般代码会变成这样:
``` java ``` yaml
sa-token: sa-token:
sso: sso:
# SSO-Server端 统一认证地址 # SSO-Server端 统一认证地址
auth-url: http://sa-sso-server.com:9000/sso/auth auth-url: http://sa-sso-server.com:9000/sso/auth
# 使用Http请求校验ticket
is-http: true
# SSO-Server端 ticket校验地址 # SSO-Server端 ticket校验地址
check-ticket-url: http://sa-sso-server.com:9000/sso/checkTicket check-ticket-url: http://sa-sso-server.com:9000/sso/checkTicket
# 单点注销地址 # 单点注销地址
slo-url: http://sa-sso-server.com:9000/sso/logout slo-url: http://sa-sso-server.com:9000/sso/logout
# 接口调用秘钥
secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
# SSO-Server端 查询userinfo地址 # SSO-Server端 查询userinfo地址
userinfo-url: http://sa-sso-server.com:9000/sso/userinfo userinfo-url: http://sa-sso-server.com:9000/sso/userinfo
``` ```
一堆 xxx-url 配置比较繁琐,且含有大量重复字符,现在我们可以将其简化为: 一堆 xxx-url 配置比较繁琐,且含有大量重复字符,现在我们可以将其简化为:
``` java ``` yaml
sa-token: sa-token:
sso: sso:
server-url: http://sa-sso-server.com:9000 server-url: http://sa-sso-server.com:9000
is-http: true
secretkey: kQwIOrYvnXmSDkwEiFngrKidMcdrgKor
``` ```
只要你配置了 `server-url` 地址Sa-Token 就可以自动拼接出其它四个地址: 只要你配置了 `server-url` 地址Sa-Token 就可以自动拼接出其它四个地址:

View File

@@ -44,7 +44,7 @@ public class SaTokenConfigure implements WebMvcConfigurer {
registry.addInterceptor(new SaInterceptor(handler -> { registry.addInterceptor(new SaInterceptor(handler -> {
// 指定一条 match 规则 // 指定一条 match 规则
SaRouter SaRouter
.match("/**") // 拦截的 path 列表,可以写多个 .match("/**") // 拦截的 path 列表,可以写多个 */
.notMatch("/user/doLogin") // 排除掉的 path 列表,可以写多个 .notMatch("/user/doLogin") // 排除掉的 path 列表,可以写多个
.check(r -> StpUtil.checkLogin()); // 要执行的校验动作,可以写完整的 lambda 表达式 .check(r -> StpUtil.checkLogin()); // 要执行的校验动作,可以写完整的 lambda 表达式