在运行时使用Dagger添加Retrofit请求拦截器

3

我正在使用Dagger和Retrofit。 我使用Dagger注入我的Retrofit服务。

现在,我想发出授权请求以获取accessToken。

之后,我想通过添加请求拦截器来增强我的API模块,以便将此访问令牌用于未来的请求。

我的想法是在收到访问令牌后使用ObjectGraph.plus()方法,但我不确定这是否是最佳方法。

有人能指点我正确的方向,或者在GitHub上有示例项目吗?

1个回答

11

关键是始终添加RequestInterceptor,然后更改它是否添加标题。

class ApiHeaders implements RequestInterceptor {
  private String authValue;

  public void clearAuthValue() {
    authValue = null;
  }

  public void setAuthValue(String authValue) {
    this.authValue = authValue;
  }

  @Override public void intercept(RequestFacade request) {
    String authValue = this.authValue;
    if (authValue != null) {
      request.addHeader("Authorization", authValue);
    }
  }
}

这样你就可以在需要设置或清除令牌时注入你的ApiHeaders单例。


如果我们在应用程序中使用单个NetworkModule,当用户登录时如何在运行时使用authValue调用setAuthValue呢? - Jagdeep Singh
@Jake Wharton,我遇到了一个类似的问题,你能否看一下这个链接:https://stackoverflow.com/questions/45078720/dagger-generating-multiple-instances-of-retrofit-interceptor - user606669
@Jake Wharton,我们公司有类似的问题,你能否帮忙看一下? https://stackoverflow.com/q/46791074/5727805 谢谢! - MKaro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接