Dan*_*son 1 android restful-authentication okhttp retrofit2
在使用拦截器和身份验证器添加访问令牌标头时,当服务器以 401 响应时,我的身份验证器会被正确调用。
身份验证器通过单独的网络调用更新访问令牌,并将其设置在标头中以再次尝试。代码将与此示例非常相似
我只花了一个小时搞清楚我用错误的方法来再度令牌添加到认证,addHeaderVSheader。
作品:
if (accessToken != null){
// retry the failed 401 request with new access token
return response.request().newBuilder()
.header("Authorization", accessToken) // use the new access token
.build();
}
Run Code Online (Sandbox Code Playgroud)
不起作用:
if (accessToken != null){
// retry the failed 401 request with new access token
return response.request().newBuilder()
.addHeader("Authorization", accessToken) // use the new access token
.build();
}
Run Code Online (Sandbox Code Playgroud)
这里会发生什么,为什么addHeader()行为与header()
引用文档:
header :
将名为 {@code name} 的标头设置为 {@code value}。如果此请求已经有任何具有该名称的标头,则它们都将被替换。
addHeader :
添加带有 {@code name} 和 {@code value} 的标题。对于像“Cookie”这样的多值标头,更喜欢使用这种方法。请注意,对于某些标头,包括 {@code Content-Length} 和 {@code Content-Encoding},OkHttp 可能会将 {@code value} 替换为从请求正文派生的标头。
所以header如果已经添加将替换,而addHeader通常不会。
| 归档时间: |
|
| 查看次数: |
407 次 |
| 最近记录: |