java - 来自拦截器令牌的召回 http 请求无效
问题描述
我们在 API 中使用令牌,当任何 HTTP 请求时,我们检查令牌是否处于活动状态,如果令牌不处于活动状态,我们会在 intereceptor 中获取一次新的
if (resultObj.code == AppConstants.TOKEN_IS_NOT_ACTIVE)
getTokenOnce()
但我怎样才能得到那个请求(可以是订单,报告......)并再次发布到服务器
解决方案
目前尚不清楚如何在 api 中进行令牌身份验证,因此我将仅举一个使用不记名令牌身份验证类型的示例。
okhttp 拦截器的签名是:
fun intercept(chain: Interceptor.Chain): Response
在里面chain
你会找到原始请求。这可能看起来像的一种方式是:
override fun intercept(chain: Interceptor.Chain): Response {
val originalRequest = chain.request
var response = chain.proceed(originalRequest)
if (response.code == AppConstants.TOKEN_IS_NOT_ACTIVE) {
val token = getTokenOnce()
val newRequest = originalRequest.newBuilder()
.header("Authorization", "Bearer $token")
.build()
response = chain.proceed(newRequest)
}
return response
}
所以这里的想法是从原始请求创建一个新请求newBuilder()
- 并添加一个带有新令牌的标头。我假设getTokenOnce
可以将新令牌作为字符串返回。也许这需要稍微调整一下。
最后,您再次处理请求。
要记住的一件事是,在设置拦截器时,需要将其设置为应用程序拦截器,而不是网络拦截器。网络拦截器不允许您进行多次。
推荐阅读
- java - 基于Dependency的不同Java代码编译
- swift - 滚动视图中的 SwiftUI HStack 未正确显示图像
- javascript - Apple 的 Safari 浏览器使用什么 JavaScript 引擎?
- ios - 如何通过快速点击按钮来增加标签的数量?
- tensorflow - 如何获取车牌上每个符号的边界框
- python - Matplotlib 直方图移动 xticks
- amazon-web-services - 获取 SageMaker 中每个数据点的异常分数?
- php - 如何在 Laravel 日志中向 Google Stackdriver 注入自定义信息
- discord - discord.py 机器人重复消息
- java - 如何修复声纳“确保散列数据在这里是安全的”安全问题