向特定呼叫添加请求拦截器

时间:2015-12-15 12:02:58

标签: retrofit

我目前正试图弄清楚改装提供哪些选项只能将拦截器添加到特定的呼叫中。

背景&用例

我目前正在使用改装1.9
用例非常简单。想象一下,需要登录并获取会话令牌的用户。有一个电话。

/**
 * Call the backend and request a session token
 */
@POST("auht_endpoint")
Observable<Session> login(...);

所有其他调用都需要以请求标头的形式来自上述会话的令牌。换句话说,所有后续调用都有一个标头,用于向后端提供会话令牌。

我的问题

是否有一种简单的方法可以通过拦截器将此标头添加到特定的调用中?

到目前为止我尝试了什么

  • 显然,最简单的方法是将@Header注释添加到特定调用并将令牌作为参数提供

  • 我想可以检查拦截器内请求中的url。不太灵活。

  • 使用不同的拦截器创建不同的休息适配器。我听说你应该出于性能原因避免创建其余适配器的几个实例。

其他信息

  • 我没有致力于拦截器,我会使用其他解决方案

  • 我说我正在使用改装1.9,但我也有兴趣通过改造2.x

  • 来实现这一目标。

1 个答案:

答案 0 :(得分:1)

请注意,这不是答案,评论框太小了。

我最近遇到了这个问题,我找到了和你一样的解决方案。

  • 首先,我把双适配器放在一边 - 这是最后的手段。

  • @Header字段似乎没问题,因为您明确定义此特定请求需要授权。然而,使用起来有点无聊。

  • 拦截器中的url检查看起来很“丑陋”,但我决定坚持下去。我的意思是,如果某个特定端点的所有请求都需要该授权标头,那么问题是什么?

我有另外两个想法:

  • 以某种方式动态替换/修改与Retrofit一起使用的okHttpClient。经过一些测试,我认为这是不可能的。

  • 也许为调用定义创建一些自定义注释@AddAuthorizationHeader,它将为您完成所有事情,但我想这也不可能。

在这件事上,Retrofit 2.x并没有带来任何新东西。