java - 如何在 Spring Boot Rest 模板客户端中处理过期的刷新令牌
问题描述
我正在将第三方 API 集成到我的 Spring Boot 应用程序中。
第三方 API 身份验证的工作原理:
- 初始授权后,我获得了在给定时间后过期的刷新令牌和访问令牌
- 访问令牌过期后,我使用刷新令牌获取新的访问令牌和新的刷新令牌
使用当前的访问令牌,我可以调用 API。
有没有办法使用 RestTemplate 无缝处理这种情况?
我已经尝试手动处理这种情况,所以如果我从 API 得到 401,我发送了一个刷新令牌请求,重写了我返回的密钥并重试了请求,不确定如何处理存储 api 密钥以备不时之需重新启动服务器。
解决方案
这很容易通过 a来完成ClientHttpRequestInterceptor
,您可以在其中替换请求标头,例如401
:
@Override
public ClientHttpResponse intercept(
HttpRequest request,
byte[] body,
ClientHttpRequestExecution execution) throws IOException {
ClientHttpResponse response = execution.execute(request, body);
if(response.getStatusCode() == HttpStatus.UNAUTHORIZED) {
request.getHeaders().replace("Auth-Header", getNewToken());
return execution.execute(request, body);
}
return response;
}
请参阅此处以获取更多指导。
推荐阅读
- spring - 在没有弹簧靴的情况下使用 Autowired
- javascript - InteractJs - 可拖动项目的动态捕捉到父 div 中的指南
- c# - 如何将此 VB.Net 翻译成 C#?
- c# - 是否使用增量运算符作为打破 C# 中嵌套循环的正确方法?
- macos - 如何在 macOS Big Sur 中将闪存驱动器格式化为 FAT32?
- google-cloud-platform - 使用 GCP 令牌、terraform 和 vault 创建项目时出现权限错误
- c - 子进程在 c 中未正确终止
- amazon-web-services - 如何在不是“@app.lambda_function()”的测试中调用 AWS Chalice 函数
- rust - 过早地超出范围
- java - Clickhouse 异常:超出内存限制(总计):28.13 GiB(尝试分配 4543835 字节的块)