docs: sso 章节和 oauth2 章节文档增加可重写策略说明

This commit is contained in:
click33 2025-05-15 21:47:56 +08:00
parent df91c2ece0
commit a5ea1a3a4d
4 changed files with 152 additions and 6 deletions

View File

@ -130,8 +130,93 @@ SaOAuth2Util.revokeClientToken(clientToken);
SaOAuth2Util.revokeClientTokenByIndex(clientId);
```
---
详情请参考源码:[码云SaOAuth2Util.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-plugin/sa-token-oauth2/src/main/java/cn/dev33/satoken/oauth2/template/SaOAuth2Util.java)
### OAuth2-Server 所有可重写策略
#### 权限处理器
``` java
// 根据 scope 信息对一个 AccessTokenModel 进行加工处理
SaOAuth2Strategy.instance.workAccessTokenByScope = at -> {
// ...
}
// 当使用 RefreshToken 刷新 AccessToken 时,根据 scope 信息对一个 AccessTokenModel 进行加工处理
SaOAuth2Strategy.instance.refreshAccessTokenWorkByScope = at -> {
// ...
}
// 根据 scope 信息对一个 ClientTokenModel 进行加工处理
SaOAuth2Strategy.instance.workClientTokenByScope = at -> {
// ...
}
```
#### grant_type 处理器
``` java
// 根据 grantType 构造一个 AccessTokenModel
SaOAuth2Strategy.instance.grantTypeAuth = req -> {
// ...
}
```
#### 凭证创建
``` java
// 创建一个 code value
SaOAuth2Strategy.instance.createCodeValue = (clientId, loginId, scopes) -> {
// ...
}
// 创建一个 AccessToken value
SaOAuth2Strategy.instance.createAccessToken = (clientId, loginId, scopes) -> {
// ...
}
// 创建一个 RefreshToken value
SaOAuth2Strategy.instance.createRefreshToken = (clientId, loginId, scopes) -> {
// ...
}
// 创建一个 ClientToken value
SaOAuth2Strategy.instance.createClientToken = (clientId, scopes) -> {
// ...
}
```
#### 认证流程回调
``` java
// OAuth-Server端未登录时返回的View
SaOAuth2Strategy.instance.notLoginView = () -> {
// ...
}
// OAuth-Server端确认授权时返回的View
SaOAuth2Strategy.instance.confirmView = (clientId, scopes) -> {
// ...
}
// OAuth-Server端登录函数
SaOAuth2Strategy.instance.doLoginHandle = (name, pwd) -> {
// ...
}
// OAuth-Server端用户在授权指定 client 前的检查,如果检查不通过,请直接抛出异常
SaOAuth2Strategy.instance.userAuthorizeClientCheck = (loginId, clientId) -> {
// ...
}
```
#### 其它
``` java
// 在创建 SaClientModel 时,设置其默认字段
SaOAuth2Strategy.instance.setSaClientModelDefaultFields = (clientModel) -> {
// ...
}
```

View File

@ -141,3 +141,64 @@ SaSsoClientUtil.buildSignoutMessage(Object loginId, SaLogoutParameter logoutPara
详情请参考源码:[码云SaSsoClientUtil.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/template/SaSsoClientUtil.java)
## Sso-Server 所有可重写策略
``` java
// 发送 Http 请求的处理函数
SaSsoServerProcessor.instance.ssoServerTemplate.strategy.sendRequest = url -> {
// ...
}
// 使用异步模式执行一个任务
SaSsoServerProcessor.instance.ssoServerTemplate.strategy.asyncRun = fun -> {
// ...
}
// 未登录时返回的 View
SaSsoServerProcessor.instance.ssoServerTemplate.strategy.notLoginView = () -> {
// ...
}
// SSO-Server端登录函数
SaSsoServerProcessor.instance.ssoServerTemplate.strategy.doLoginHandle = (name, pwd) -> {
// ...
}
//SSO-Server端在授权重定向之前的通知
SaSsoServerProcessor.instance.ssoServerTemplate.strategy.jumpToRedirectUrlNotice = (redirectUrl) -> {
// ...
}
// SSO-Server端在校验 ticket 后,给 sso-client 端追加返回信息的函数
SaSsoServerProcessor.instance.ssoServerTemplate.strategy.checkTicketAppendData = (loginId, result) -> {
// ...
}
```
## Sso-Client 所有可重写策略
``` java
// 发送 Http 请求的处理函数
SaSsoClientProcessor.instance.ssoClientTemplate.strategy.sendRequest = url -> {
// ...
}
// 自定义校验 ticket 返回值的处理逻辑 (每次从认证中心获取校验 ticket 的结果后调用)
SaSsoClientProcessor.instance.ssoClientTemplate.strategy.ticketResultHandle = (ctr, back) -> {
// ...
}
// 转换:认证中心 centerId > 本地 loginId
SaSsoClientProcessor.instance.ssoClientTemplate.strategy.convertCenterIdToLoginId = (centerId) -> {
// ...
}
// 转换:本地 loginId > 认证中心 centerId
SaSsoClientProcessor.instance.ssoClientTemplate.strategy.convertLoginIdToCenterId = (loginId) -> {
// ...
}
```

View File

@ -34,7 +34,7 @@ public class SaSsoClientStrategy {
/**
* 发送 Http 请求的处理函数
*/
public SendRequestFunction sendHttp = url -> {
public SendRequestFunction sendRequest = url -> {
return SaManager.getSaHttpTemplate().get(url);
};
@ -72,7 +72,7 @@ public class SaSsoClientStrategy {
* @return 返回的结果
*/
public SaResult requestAsSaResult(String url) {
String body = sendHttp.apply(url);
String body = sendRequest.apply(url);
Map<String, Object> map = SaManager.getSaJsonTemplate().jsonToMap(body);
return new SaResult(map);
}

View File

@ -73,7 +73,7 @@ public class SaSsoClientTemplate extends SaSsoTemplate {
*/
public Object getData(String path, Map<String, Object> paramMap) {
String url = buildCustomPathUrl(path, paramMap);
return strategy.sendHttp.apply(url);
return strategy.sendRequest.apply(url);
}
/**
@ -174,7 +174,7 @@ public class SaSsoClientTemplate extends SaSsoTemplate {
// 发起请求
String finalUrl = SaFoxUtil.joinParam(pushUrl, paramsStr);
return strategy.sendHttp.apply(finalUrl);
return strategy.sendRequest.apply(finalUrl);
}
/**