--- 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 cn.dev33 sa-token-forest ${sa.top.version} ``` Gradle 参考:`implementation 'cn.dev33:sa-token-forest:${sa.top.version}'` == OkHttps ``` xml cn.dev33 sa-token-okhttps ${sa.top.version} ``` Gradle 参考:`implementation 'cn.dev33:sa-token-okhttps:${sa.top.version}'` == RestTemplate ``` xml cn.dev33 sa-token-rest-template ${sa.top.version} ``` Gradle 参考:`implementation 'cn.dev33:sa-token-rest-template:${sa.top.version}'` == RestClient ``` xml cn.dev33 sa-token-rest-client ${sa.top.version} ``` Gradle 参考:`implementation 'cn.dev33:sa-token-rest-client:${sa.top.version}'` ::: ## 选型建议 | 运行环境 | 推荐插件 | | :-------- | :-------- | | 非 Spring / Solon 等 | `sa-token-forest` 或 `sa-token-okhttps` | | Spring Boot 2,或 Boot 3.0–3.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.0–3.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 params) { // ... } }); ``` 在 Spring Boot 环境中,也可通过注入 `SaHttpTemplate` Bean 覆盖默认实现(参考 [全局类、方法](/more/common-action))。 ## 错误码 30010 若运行时抛出「本地系统没有配置 http 请求处理器」,说明当前 classpath 未引入任何 HTTP 插件,且未手动设置 `SaHttpTemplate`。 请按上文选型建议引入一个插件,或参考 [异常码表 - 30010](/fun/exception-code#sa-token-sso-单点登录相关:) 排查。