完善文档

This commit is contained in:
click33
2022-02-08 16:05:54 +08:00
parent 1cd2f8ab1b
commit f9bd57c884
7 changed files with 66 additions and 24 deletions

View File

@@ -7,7 +7,7 @@ Sa-Token 提供两种Token自动过期策略分别是`timeout`与`activity-ti
### timeout ### timeout
1. `timeout`代表Token的长久有效期单位/秒,例如将其配置为 2592000 (30天)代表在30天后Token必定过期无法继续使用 1. `timeout`代表Token的长久有效期单位/秒,例如将其配置为 2592000 (30天)代表在30天后Token必定过期无法继续使用
2. `timeout`无法续签,想要继续使用必须重新登录 2. `timeout`~~无法续签,想要继续使用必须重新登录~~。v1.29.0+ 版本新增续期方法:`StpUtil.renewTimeout(100)`
3. `timeout`的值配置为-1后代表永久有效不会过期 3. `timeout`的值配置为-1后代表永久有效不会过期

View File

@@ -48,7 +48,7 @@ public class SaOAuth2TemplateImpl extends SaOAuth2Template {
.setClientSecret("aaaa-bbbb-cccc-dddd-eeee") .setClientSecret("aaaa-bbbb-cccc-dddd-eeee")
.setAllowUrl("*") .setAllowUrl("*")
.setContractScope("userinfo") .setContractScope("userinfo")
.setIsAutoMode(true); .setIsAutoMode(true);
} }
return null; return null;
} }
@@ -63,6 +63,9 @@ public class SaOAuth2TemplateImpl extends SaOAuth2Template {
} }
``` ```
你可以在 [框架配置](/use/config?id=SaClientModel属性定义) 了解有关 `SaClientModel` 对象所有属性的详细定义
2、新建`SaOAuth2ServerController` 2、新建`SaOAuth2ServerController`
``` java ``` java
/** /**

View File

@@ -111,8 +111,26 @@ public class LoginController {
eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbklkIjoiMTAwMDEiLCJybiI6IjZYYzgySzBHVWV3Uk5NTTl1dFdjbnpFZFZHTVNYd3JOIn0.F_7fbHsFsDZmckHlGDaBuwDotZwAjZ0HB14DRujQfOQ eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJsb2dpbklkIjoiMTAwMDEiLCJybiI6IjZYYzgySzBHVWV3Uk5NTTl1dFdjbnpFZFZHTVNYd3JOIn0.F_7fbHsFsDZmckHlGDaBuwDotZwAjZ0HB14DRujQfOQ
``` ```
### 5、扩展参数
你可以通过以下方式在登录时注入扩展参数:
### 5、不同模式策略对比 ``` java
// 登录10001账号并为生成的 Token 追加扩展参数name
StpUtil.login(10001, SaLoginConfig.setExtra("name", "zhangsan"));
// 连缀写法追加多个
StpUtil.login(10001, SaLoginConfig
.setExtra("name", "zhangsan")
.setExtra("age", 18)
.setExtra("role", "超级管理员"));
// 获取扩展参数
String name = StpUtil.getExtra("name");
```
### 6、不同模式策略对比
注入不同模式会让框架具有不同的行为策略,以下是三种模式的差异点(为方便叙述,以下比较以同时引入 jwt 与 Redis 作为前提): 注入不同模式会让框架具有不同的行为策略,以下是三种模式的差异点(为方便叙述,以下比较以同时引入 jwt 与 Redis 作为前提):

View File

@@ -152,15 +152,16 @@ sa-token:
### OAuth2.0相关配置 ### OAuth2.0相关配置
| 参数名称 | 类型 | 默认值 | 说明 | | 参数名称 | 类型 | 默认值 | 说明 |
| :-------- | :-------- | :-------- | :-------- | | :-------- | :-------- | :-------- | :-------- |
| isCode | Boolean | true | 是否打开模式授权码Authorization Code | | isCode | Boolean | true | 是否打开模式:授权码(`Authorization Code` |
| isImplicit | Boolean | false | 是否打开模式隐藏式Implicit | | isImplicit | Boolean | false | 是否打开模式:隐藏式(`Implicit` |
| isPassword | Boolean | false | 是否打开模式密码式Password | | isPassword | Boolean | false | 是否打开模式:密码式(`Password` |
| isClient | Boolean | false | 是否打开模式凭证式Client Credentials | | isClient | Boolean | false | 是否打开模式:凭证式(`Client Credentials` |
| isNewRefresh | Boolean | false | 是否在每次 Refresh-Token 刷新 Access-Token 时,产生一个新的 Refresh-Token | | isNewRefresh | Boolean | false | 是否在每次 `Refresh-Token` 刷新 `Access-Token` 时,产生一个新的 Refresh-Token |
| codeTimeout | long | 300 | Code授权码 保存的时间(单位秒) 默认五分钟 | | codeTimeout | long | 300 | Code授权码 保存的时间单位:秒) 默认五分钟 |
| accessTokenTimeout | long | 7200 | Access-Token 保存的时间(单位秒) 默认两个小时 | | accessTokenTimeout | long | 7200 | `Access-Token` 保存的时间单位:秒)默认两个小时 |
| refreshTokenTimeout | long | 2592000 | Refresh-Token 保存的时间(单位秒) 默认30 天 | | refreshTokenTimeout | long | 2592000 | `Refresh-Token` 保存的时间单位:秒) 默认30 天 |
| clientTokenTimeout | long | 7200 | Client-Token 保存的时间(单位秒) 默认两个小时 | | clientTokenTimeout | long | 7200 | `Client-Token` 保存的时间单位:秒) 默认两个小时 |
| pastClientTokenTimeout | long | 7200 | `Past-Client-Token` 保存的时间(单位:秒) ,默认为-1代表延续 `Client-Token` 的有效时间 |
配置示例: 配置示例:
``` yml ``` yml
@@ -174,3 +175,23 @@ sa-token:
is-password: true is-password: true
is-client: true is-client: true
``` ```
##### SaClientModel属性定义
| 参数名称 | 类型 | 默认值 | 说明 |
| :-------- | :-------- | :-------- | :-------- |
| clientId | String | null | 应用id应该全局唯一 |
| clientSecret | String | null | 应用秘钥 |
| contractScope | String | null | 应用签约的所有权限, 多个用逗号隔开 |
| allowUrl | String | null | 应用允许授权的所有URL, 多个用逗号隔开 (可以使用 `*` 号通配符) |
| isCode | Boolean | false | 单独配置此 Client 是否打开模式:授权码(`Authorization Code` |
| isImplicit | Boolean | false | 单独配置此 Client 是否打开模式:隐藏式(`Implicit` |
| isPassword | Boolean | false | 单独配置此 Client 是否打开模式:密码式(`Password` |
| isClient | Boolean | false | 单独配置此 Client 是否打开模式:凭证式(`Client Credentials` |
| isAutoMode | Boolean | true | 是否自动判断此 Client 开放的授权模式。<br>此值为 true 时:四种模式(`isCode、isImplicit、isPassword、isClient`)是否生效,依靠全局设置;<br>此值为 false 时:四种模式(`isCode、isImplicit、isPassword、isClient`)是否生效,依靠局部配置+全局配置 |
| isNewRefresh | Boolean | 取全局配置 | 单独配置此Client是否在每次 `Refresh-Token` 刷新 `Access-Token` 时,产生一个新的 Refresh-Token [ 默认取全局配置 ] |
| accessTokenTimeout | long | 取全局配置 | 单独配置此Client`Access-Token` 保存的时间(单位:秒) [默认取全局配置] |
| refreshTokenTimeout | long | 取全局配置 | 单独配置此Client`Refresh-Token` 保存的时间(单位:秒) [默认取全局配置] |
| clientTokenTimeout | long | 取全局配置 | 单独配置此Client`Client-Token` 保存的时间(单位:秒) [默认取全局配置] |
| pastClientTokenTimeout | long | 取全局配置 | 单独配置此Client`Past-Client-Token` 保存的时间(单位:秒) [默认取全局配置] |

View File

@@ -42,8 +42,8 @@ public class SaOAuth2Config implements Serializable {
/** Client-Token 保存的时间(单位:秒) 默认两个小时 */ /** Client-Token 保存的时间(单位:秒) 默认两个小时 */
public long clientTokenTimeout = 60 * 60 * 2; public long clientTokenTimeout = 60 * 60 * 2;
/** Past-Client-Token 保存的时间(单位:秒) 默认为 null代表取 clientTokenTimeout 值 */ /** Past-Client-Token 保存的时间(单位:秒) 默认为 -1代表延续 Client-Token有效期 */
public Long pastClientTokenTimeout = null; public long pastClientTokenTimeout = -1;
/** /**
@@ -183,7 +183,7 @@ public class SaOAuth2Config implements Serializable {
/** /**
* @return pastClientTokenTimeout * @return pastClientTokenTimeout
*/ */
public Long getPastClientTokenTimeout() { public long getPastClientTokenTimeout() {
return pastClientTokenTimeout; return pastClientTokenTimeout;
} }

View File

@@ -256,7 +256,7 @@ public class SaOAuth2Template {
// 2.5、如果配置了 PastClientToken 的 ttl ,则需要更新一下 // 2.5、如果配置了 PastClientToken 的 ttl ,则需要更新一下
SaClientModel cm = checkClientModel(clientId); SaClientModel cm = checkClientModel(clientId);
if(oldCt != null && cm.getPastClientTokenTimeout() != null) { if(oldCt != null && cm.getPastClientTokenTimeout() != -1) {
oldCt.expiresTime = System.currentTimeMillis() + (cm.getPastClientTokenTimeout() * 1000); oldCt.expiresTime = System.currentTimeMillis() + (cm.getPastClientTokenTimeout() * 1000);
saveClientToken(oldCt); saveClientToken(oldCt);
} }
@@ -607,7 +607,7 @@ public class SaOAuth2Template {
} }
Long ttl = ct.getExpiresIn(); Long ttl = ct.getExpiresIn();
SaClientModel cm = checkClientModel(ct.clientId); SaClientModel cm = checkClientModel(ct.clientId);
if (null != cm.getPastClientTokenTimeout()) { if (cm.getPastClientTokenTimeout() != -1) {
ttl = cm.getPastClientTokenTimeout(); ttl = cm.getPastClientTokenTimeout();
} }
SaManager.getSaTokenDao().set(splicingPastTokenIndexKey(ct.clientId), ct.clientToken, ttl); SaManager.getSaTokenDao().set(splicingPastTokenIndexKey(ct.clientId), ct.clientToken, ttl);

View File

@@ -47,11 +47,11 @@ public class SaClientModel implements Serializable {
public Boolean isClient = false; public Boolean isClient = false;
/** /**
* 是否自动判断开放的授权模式 * 是否自动判断此 Client 开放的授权模式
* <br> 此值为true时四种模式isCode、isImplicit、isPassword、isClient是否生效依靠全局设置 * <br> 此值为true时四种模式isCode、isImplicit、isPassword、isClient是否生效依靠全局设置
* <br> 此值为false时四种模式isCode、isImplicit、isPassword、isClient是否生效依靠局部配置+全局配置 * <br> 此值为false时四种模式isCode、isImplicit、isPassword、isClient是否生效依靠局部配置+全局配置
*/ */
public Boolean isAutoMode = false; public Boolean isAutoMode = true;
/** 单独配置此Client是否在每次 Refresh-Token 刷新 Access-Token 时,产生一个新的 Refresh-Token [默认取全局配置] */ /** 单独配置此Client是否在每次 Refresh-Token 刷新 Access-Token 时,产生一个新的 Refresh-Token [默认取全局配置] */
public Boolean isNewRefresh; public Boolean isNewRefresh;
@@ -66,7 +66,7 @@ public class SaClientModel implements Serializable {
public long clientTokenTimeout; public long clientTokenTimeout;
/** 单独配置此ClientPast-Client-Token 保存的时间(单位:秒) [默认取全局配置] */ /** 单独配置此ClientPast-Client-Token 保存的时间(单位:秒) [默认取全局配置] */
public Long pastClientTokenTimeout; public long pastClientTokenTimeout;
public SaClientModel() { public SaClientModel() {
@@ -215,14 +215,14 @@ public class SaClientModel implements Serializable {
} }
/** /**
* @return 是否自动判断开放的授权模式 * @return 是否自动判断此 Client 开放的授权模式
*/ */
public Boolean getIsAutoMode() { public Boolean getIsAutoMode() {
return isAutoMode; return isAutoMode;
} }
/** /**
* @param isAutoMode 是否自动判断开放的授权模式 * @param isAutoMode 是否自动判断此 Client 开放的授权模式
* @return 对象自身 * @return 对象自身
*/ */
public SaClientModel setIsAutoMode(Boolean isAutoMode) { public SaClientModel setIsAutoMode(Boolean isAutoMode) {
@@ -298,7 +298,7 @@ public class SaClientModel implements Serializable {
/** /**
* @return 此ClientPast-Client-Token 保存的时间(单位:秒) [默认取全局配置] * @return 此ClientPast-Client-Token 保存的时间(单位:秒) [默认取全局配置]
*/ */
public Long getPastClientTokenTimeout() { public long getPastClientTokenTimeout() {
return pastClientTokenTimeout; return pastClientTokenTimeout;
} }
@@ -306,7 +306,7 @@ public class SaClientModel implements Serializable {
* @param pastClientTokenTimeout 单独配置此ClientPast-Client-Token 保存的时间(单位:秒) [默认取全局配置] * @param pastClientTokenTimeout 单独配置此ClientPast-Client-Token 保存的时间(单位:秒) [默认取全局配置]
* @return 对象自身 * @return 对象自身
*/ */
public SaClientModel setPastClientTokenTimeout(Long pastClientTokenTimeout) { public SaClientModel setPastClientTokenTimeout(long pastClientTokenTimeout) {
this.pastClientTokenTimeout = pastClientTokenTimeout; this.pastClientTokenTimeout = pastClientTokenTimeout;
return this; return this;
} }