1
0
mirror of synced 2026-09-11 04:49:41 +00:00
Files

129 lines
4.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: "Sa-Token HTTP 请求扩展"
keywords: "Sa-Token,sa-token,satoken,Sa-Token文档,HTTP 请求扩展,插件"
description: "Sa-Token HTTP 请求扩展:自定义 SaHttpTemplate,用于 SSO 模式三、单点注销等 HTTP 调用。"
---
# HTTP 请求扩展
---
## HTTP 请求插件大全
Sa-Token 在 SSO 模式三(`isHttp`)、单点注销、消息推送等场景需要发起 HTTP 请求。框架将 HTTP 调用逻辑抽象到 `SaHttpTemplate` 接口,
开发者只需引入对应的 HTTP 插件依赖,框架会通过 SPI 机制自动完成注入,接口签名:[SaHttpTemplate.java](https://gitee.com/dromara/sa-token/blob/master/sa-token-core/src/main/java/cn/dev33/satoken/http/SaHttpTemplate.java)
框架已提供的 HTTP 请求插件包括:
- **sa-token-forest**:整合 Forest,适用于 Spring / 非 Spring 环境(SSO 示例默认使用)。
- **sa-token-okhttps**:整合 OkHttps,适用于 Spring / 非 Spring 环境。
- **sa-token-rest-template**:整合 Spring `RestTemplate`,适用于 Spring Boot 2 / 3 / 4 环境。
- **sa-token-rest-client**:整合 Spring `RestClient`,适用于 Spring Boot 3.2+ / Spring Framework 6.1+ 环境。
> 默认实现:
>
> - `SaHttpTemplateDefaultImpl` 未实现 HTTP 调用,未引入插件时会抛出「本地系统没有配置 http 请求处理器」(错误码 30010)。
> - 同一 classpath 只应存在一个 HTTP 插件;多插件并存时后加载的会覆盖 `SaHttpTemplate`。
:::tabs
== Forest
``` xml
<!-- Sa-Token 整合 Forest -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-forest</artifactId>
<version>${sa.top.version}</version>
</dependency>
```
Gradle 参考:`implementation 'cn.dev33:sa-token-forest:${sa.top.version}'`
== OkHttps
``` xml
<!-- Sa-Token 整合 OkHttps -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-okhttps</artifactId>
<version>${sa.top.version}</version>
</dependency>
```
Gradle 参考:`implementation 'cn.dev33:sa-token-okhttps:${sa.top.version}'`
== RestTemplate
``` xml
<!-- Sa-Token 整合 RestTemplate(需 Spring Boot 环境,项目已引入 spring-web -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-rest-template</artifactId>
<version>${sa.top.version}</version>
</dependency>
```
Gradle 参考:`implementation 'cn.dev33:sa-token-rest-template:${sa.top.version}'`
== RestClient
``` xml
<!-- Sa-Token 整合 RestClient(需 Spring Boot 3.2+ / Spring Framework 6.1+ -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-rest-client</artifactId>
<version>${sa.top.version}</version>
</dependency>
```
Gradle 参考:`implementation 'cn.dev33:sa-token-rest-client:${sa.top.version}'`
:::
## 选型建议
| 运行环境 | 推荐插件 |
| :-------- | :-------- |
| 非 Spring / Solon 等 | `sa-token-forest` 或 `sa-token-okhttps` |
| Spring Boot 2,或 Boot 3.03.1 | `sa-token-rest-template` 或 `sa-token-forest` |
| Spring Boot 3.2+ / 4 | **优先** `sa-token-rest-client`,或 `sa-token-rest-template`(兼容旧代码) |
- `RestTemplate` 在 Spring Boot 4 中已标记为 deprecated,但仍可使用。
- `RestClient` 需要 Spring Framework 6.1+,无法在 Spring Boot 2 或 Boot 3.03.1 中使用。
## 使用场景
- **SSO 模式三**:ticket 校验、单点注销、消息推送(参考 [模式三](/sso/sso-type3)、[消息推送](/sso/message-push)
- **SSO-Server 模式三**Server 端需配置 HTTP 请求处理器(参考 [搭建 SSO-Server](/sso/sso-server)
## 自定义 Http 请求处理器
**方式一(推荐)**:引入官方插件,SPI 自动注册。
**方式二**:手动注册(参考 [插件开发指南 - 更改全局组件](/fun/plugin-dev#方式2:更改全局组件实现)):
``` java
// 使用官方插件实现
SaManager.setSaHttpTemplate(new SaHttpTemplateForForest());
// 或自定义实现 SaHttpTemplate 接口
SaManager.setSaHttpTemplate(new SaHttpTemplate() {
@Override
public String get(String url) {
// ...
}
@Override
public String postByFormData(String url, Map<String, Object> params) {
// ...
}
});
```
在 Spring Boot 环境中,也可通过注入 `SaHttpTemplate` Bean 覆盖默认实现(参考 [全局类、方法](/more/common-action))。
## 错误码 30010
若运行时抛出「本地系统没有配置 http 请求处理器」,说明当前 classpath 未引入任何 HTTP 插件,且未手动设置 `SaHttpTemplate`。
请按上文选型建议引入一个插件,或参考 [异常码表 - 30010](/fun/exception-code#sa-token-sso-单点登录相关:) 排查。