2025-05-08 20:52:52 +08:00
|
|
|
|
# Sa-Token SSO Server端 二次开发用到的所有函数说明
|
|
|
|
|
|
|
|
|
|
本篇展示一下 SSO 模块常用的工具类、方法
|
|
|
|
|
|
|
|
|
|
## Sso-Server 工具类
|
|
|
|
|
|
|
|
|
|
### Ticket 操作
|
|
|
|
|
``` java
|
|
|
|
|
// 增删改
|
|
|
|
|
|
|
|
|
|
// 删除 Ticket
|
|
|
|
|
SaSsoServerUtil.deleteTicket(String ticket);
|
|
|
|
|
|
|
|
|
|
// 根据参数创建一个 ticket 码,并保存
|
|
|
|
|
SaSsoServerUtil.createTicketAndSave(String client, Object loginId, String tokenValue);
|
|
|
|
|
|
|
|
|
|
// 查
|
|
|
|
|
|
|
|
|
|
// 查询 ticket ,如果 ticket 无效则返回 null
|
|
|
|
|
SaSsoServerUtil.getTicket(String ticket);
|
|
|
|
|
|
|
|
|
|
// 查询 ticket 指向的 loginId,如果 ticket 码无效则返回 null
|
|
|
|
|
SaSsoServerUtil.getLoginId(String ticket);
|
|
|
|
|
|
|
|
|
|
// 查询 ticket 指向的 loginId,并转换为指定类型
|
|
|
|
|
SaSsoServerUtil.getLoginId(String ticket, Class<T> cs);
|
|
|
|
|
|
|
|
|
|
// 校验
|
|
|
|
|
|
|
|
|
|
// 校验 Ticket,无效 ticket 会抛出异常
|
|
|
|
|
SaSsoServerUtil.checkTicket(String ticket);
|
|
|
|
|
|
|
|
|
|
// 校验 Ticket 码,无效 ticket 会抛出异常,如果此ticket是有效的,则立即删除
|
|
|
|
|
SaSsoServerUtil.checkTicketParamAndDelete(String ticket);
|
|
|
|
|
|
|
|
|
|
// 校验 Ticket,无效 ticket 会抛出异常,如果此ticket是有效的,则立即删除
|
|
|
|
|
SaSsoServerUtil.checkTicketParamAndDelete(String ticket, String client);
|
|
|
|
|
|
|
|
|
|
// ticket 索引
|
|
|
|
|
|
|
|
|
|
// 查询 指定 client、loginId 其所属的 ticket 值
|
|
|
|
|
SaSsoServerUtil.getTicketValue(String client, Object loginId);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Client 信息获取
|
|
|
|
|
``` java
|
|
|
|
|
// 获取所有 Client
|
|
|
|
|
SaSsoServerUtil.getClients();
|
|
|
|
|
|
|
|
|
|
// 获取应用信息,无效 client 返回 null
|
|
|
|
|
SaSsoServerUtil.getClient(String client);
|
|
|
|
|
|
|
|
|
|
// 获取应用信息,无效 client 则抛出异常
|
|
|
|
|
SaSsoServerUtil.getClientNotNull(String client);
|
|
|
|
|
|
|
|
|
|
// 获取匿名 client 信息
|
|
|
|
|
SaSsoServerUtil.getAnonClient();
|
|
|
|
|
|
|
|
|
|
// 获取所有需要接收消息推送的 Client
|
|
|
|
|
SaSsoServerUtil.getNeedPushClients();
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 重定向 URL 构建与校验
|
|
|
|
|
``` java
|
|
|
|
|
// 构建 URL:sso-server 端向 sso-client 下放 ticket 的地址
|
|
|
|
|
SaSsoServerUtil.buildRedirectUrl(String client, String redirect, Object loginId, String tokenValue);
|
|
|
|
|
|
|
|
|
|
// 校验重定向 url 合法性
|
|
|
|
|
SaSsoServerUtil.checkRedirectUrl(String client, String url);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 单点注销
|
|
|
|
|
``` java
|
|
|
|
|
// 指定账号单点注销
|
|
|
|
|
SaSsoServerUtil.ssoLogout(Object loginId);
|
|
|
|
|
|
|
|
|
|
// 指定账号单点注销
|
2025-05-09 21:40:59 +08:00
|
|
|
|
SaSsoServerUtil.ssoLogout(Object loginId, SaLogoutParameter logoutParameter, String ignoreClient);
|
2025-05-08 20:52:52 +08:00
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 消息推送
|
|
|
|
|
``` java
|
|
|
|
|
// 向指定 Client 推送消息
|
|
|
|
|
SaSsoServerUtil.pushMessage(SaSsoClientModel clientModel, SaSsoMessage message);
|
|
|
|
|
|
|
|
|
|
// 向指定 client 推送消息,并将返回值转为 SaResult
|
|
|
|
|
SaSsoServerUtil.pushMessageAsSaResult(SaSsoClientModel clientModel, SaSsoMessage message);
|
|
|
|
|
|
|
|
|
|
// 向指定 Client 推送消息
|
|
|
|
|
SaSsoServerUtil.pushMessage(String client, SaSsoMessage message);
|
|
|
|
|
|
|
|
|
|
// 向指定 client 推送消息,并将返回值转为 SaResult
|
|
|
|
|
SaSsoServerUtil.pushMessageAsSaResult(String client, SaSsoMessage message);
|
|
|
|
|
|
|
|
|
|
// 向所有 Client 推送消息
|
|
|
|
|
SaSsoServerUtil.pushToAllClient(SaSsoMessage message);
|
|
|
|
|
|
|
|
|
|
// 向所有 Client 推送消息,并忽略掉某个 client
|
|
|
|
|
SaSsoServerUtil.pushToAllClient(SaSsoMessage message, String ignoreClient);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
详情请参考源码:[码云:SaSsoServerUtil.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-plugin/sa-token-sso/src/main/java/cn/dev33/satoken/sso/template/SaSsoServerUtil.java)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Sso-Client 工具类
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 构建交互地址
|
|
|
|
|
``` java
|
|
|
|
|
// 构建URL:Server端 单点登录授权地址
|
|
|
|
|
SaSsoClientUtil.buildServerAuthUrl(String clientLoginUrl, String back);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### 消息推送
|
|
|
|
|
|
|
|
|
|
``` java
|
|
|
|
|
// 向 sso-server 推送消息
|
|
|
|
|
SaSsoClientUtil.pushMessage(SaSsoMessage message);
|
|
|
|
|
|
|
|
|
|
// 向 sso-server 推送消息,并将返回值转为 SaResult
|
|
|
|
|
SaSsoClientUtil.pushMessageAsSaResult(SaSsoMessage message);
|
|
|
|
|
|
|
|
|
|
// 构建消息:校验 ticket
|
|
|
|
|
SaSsoClientUtil.buildCheckTicketMessage(String ticket, String ssoLogoutCallUrl);
|
|
|
|
|
|
|
|
|
|
// 构建消息:单点注销
|
|
|
|
|
SaSsoClientUtil.buildSignoutMessage(Object loginId, SaLogoutParameter logoutParameter);
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
详情请参考源码:[码云: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)
|
|
|
|
|
|
|
|
|
|
|
2025-05-15 21:47:56 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 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) -> {
|
|
|
|
|
// ...
|
|
|
|
|
}
|
|
|
|
|
```
|