mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-04-05 17:19:53 +08:00
完善文档
This commit is contained in:
parent
1cd2f8ab1b
commit
f9bd57c884
@ -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后,代表永久有效,不会过期
|
||||
|
||||
|
||||
|
@ -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
|
||||
/**
|
||||
|
@ -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 作为前提):
|
||||
|
||||
|
@ -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` 保存的时间(单位:秒) [默认取全局配置] |
|
||||
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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);
|
||||
|
@ -47,11 +47,11 @@ public class SaClientModel implements Serializable {
|
||||
public Boolean isClient = false;
|
||||
|
||||
/**
|
||||
* 是否自动判断开放的授权模式
|
||||
* 是否自动判断此 Client 开放的授权模式
|
||||
* <br> 此值为true时:四种模式(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 [默认取全局配置] */
|
||||
public Boolean isNewRefresh;
|
||||
@ -66,7 +66,7 @@ public class SaClientModel implements Serializable {
|
||||
public long clientTokenTimeout;
|
||||
|
||||
/** 单独配置此Client:Past-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 此Client:Past-Client-Token 保存的时间(单位:秒) [默认取全局配置]
|
||||
*/
|
||||
public Long getPastClientTokenTimeout() {
|
||||
public long getPastClientTokenTimeout() {
|
||||
return pastClientTokenTimeout;
|
||||
}
|
||||
|
||||
@ -306,7 +306,7 @@ public class SaClientModel implements Serializable {
|
||||
* @param pastClientTokenTimeout 单独配置此Client:Past-Client-Token 保存的时间(单位:秒) [默认取全局配置]
|
||||
* @return 对象自身
|
||||
*/
|
||||
public SaClientModel setPastClientTokenTimeout(Long pastClientTokenTimeout) {
|
||||
public SaClientModel setPastClientTokenTimeout(long pastClientTokenTimeout) {
|
||||
this.pastClientTokenTimeout = pastClientTokenTimeout;
|
||||
return this;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user