完善文档

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
1. `timeout`代表Token的长久有效期单位/秒,例如将其配置为 2592000 (30天)代表在30天后Token必定过期无法继续使用
2. `timeout`无法续签,想要继续使用必须重新登录
2. `timeout`~~无法续签,想要继续使用必须重新登录~~。v1.29.0+ 版本新增续期方法:`StpUtil.renewTimeout(100)`。
3. `timeout`的值配置为-1后代表永久有效不会过期

View File

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

View File

@ -111,8 +111,26 @@ public class LoginController {
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 作为前提):

View File

@ -152,15 +152,16 @@ sa-token:
### OAuth2.0相关配置
| 参数名称 | 类型 | 默认值 | 说明 |
| :-------- | :-------- | :-------- | :-------- |
| isCode | Boolean | true | 是否打开模式授权码Authorization Code |
| isImplicit | Boolean | false | 是否打开模式隐藏式Implicit |
| isPassword | Boolean | false | 是否打开模式密码式Password |
| isClient | Boolean | false | 是否打开模式凭证式Client Credentials |
| isNewRefresh | Boolean | false | 是否在每次 Refresh-Token 刷新 Access-Token 时,产生一个新的 Refresh-Token |
| codeTimeout | long | 300 | Code授权码 保存的时间(单位秒) 默认五分钟 |
| accessTokenTimeout | long | 7200 | Access-Token 保存的时间(单位秒) 默认两个小时 |
| refreshTokenTimeout | long | 2592000 | Refresh-Token 保存的时间(单位秒) 默认30 天 |
| clientTokenTimeout | long | 7200 | Client-Token 保存的时间(单位秒) 默认两个小时 |
| isCode | Boolean | true | 是否打开模式:授权码(`Authorization Code` |
| isImplicit | Boolean | false | 是否打开模式:隐藏式(`Implicit` |
| isPassword | Boolean | false | 是否打开模式:密码式(`Password` |
| isClient | Boolean | false | 是否打开模式:凭证式(`Client Credentials` |
| isNewRefresh | Boolean | false | 是否在每次 `Refresh-Token` 刷新 `Access-Token` 时,产生一个新的 Refresh-Token |
| codeTimeout | long | 300 | Code授权码 保存的时间(单位:秒) 默认五分钟 |
| accessTokenTimeout | long | 7200 | `Access-Token` 保存的时间(单位:秒)默认两个小时 |
| refreshTokenTimeout | long | 2592000 | `Refresh-Token` 保存的时间(单位:秒) 默认30 天 |
| clientTokenTimeout | long | 7200 | `Client-Token` 保存的时间(单位:秒) 默认两个小时 |
| pastClientTokenTimeout | long | 7200 | `Past-Client-Token` 保存的时间(单位:秒) ,默认为-1代表延续 `Client-Token` 的有效时间 |
配置示例:
``` yml
@ -174,3 +175,23 @@ sa-token:
is-password: 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 保存的时间(单位:秒) 默认两个小时 */
public long clientTokenTimeout = 60 * 60 * 2;
/** Past-Client-Token 保存的时间(单位:秒) 默认为 null代表取 clientTokenTimeout 值 */
public Long pastClientTokenTimeout = null;
/** Past-Client-Token 保存的时间(单位:秒) 默认为 -1代表延续 Client-Token有效期 */
public long pastClientTokenTimeout = -1;
/**
@ -183,7 +183,7 @@ public class SaOAuth2Config implements Serializable {
/**
* @return pastClientTokenTimeout
*/
public Long getPastClientTokenTimeout() {
public long getPastClientTokenTimeout() {
return pastClientTokenTimeout;
}

View File

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

View File

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