c语言编程笔录

首页 >   > 笔记大全

笔记大全

怎么让每个Http请求都自动带上token

更新时间:2023-11-06

1. 使用拦截器(Interceptor)

拦截器是在发送 Http 请求之前进行拦截并做一些相应处理的工具,我们可以利用拦截器在请求头中加入token。以下是一个简单的拦截器:

public class TokenInterceptor implements Interceptor {
  @Override
  public Response intercept(Chain chain) throws IOException {
    Request request = chain.request().newBuilder()
        .header("Authorization", "Bearer " + "your_token_here")
        .build();
    return chain.proceed(request);
  }
}

然后在你的 OkHttpClient 加入拦截器:

OkHttpClient client = new OkHttpClient.Builder()
    .addInterceptor(new TokenInterceptor())
    .build();

2. 利用继承 OkHttp 的 Request

在进行 Http 请求之前,我们可以通过 OkHttp 的 Request 对象进行预处理,加入 token 后再进行请求。我们可以继承 OkHttp 的 Request,然后在我们的 Request 中添加 token。以下是一个代码示例:

public class TokenRequest extends Request{
  String accessToken;

  public TokenRequest(Builder builder, String accessToken) {
    super(builder);
    this.accessToken = accessToken;
  }

  @Override
  public ResponseBody body() {
    return null;
  }

  @Override
  public RequestBody requestBody() {
    return null;
  }

  @Override
  public Headers headers() {
    return new Headers.Builder()
        .add("Authorization", "Bearer " + accessToken)
        .build();
  }

  @Override
  public boolean isHttps() {
    return super.isHttps();
  }
}

然后在发送请求时,使用我们自己的 Request 对象:

String accessToken = "your_token_here";
Request originalRequest = new Request.Builder()
    .url("https://example.com")
    .build();
Request tokenRequest = new TokenRequest(originalRequest.newBuilder(), accessToken);
Response response = OkHttpClient.newCall(tokenRequest).execute();

3. 使用 Apache HttpClient

如果你不想使用 OkHttp,你也可以使用 Apache HttpClient,通过设置 HttpClient 的参数来添加 token。以下是代码示例:

String accessToken = "your_token_here";
CloseableHttpClient httpClient = HttpClients.custom()
    .setDefaultHeaders(Arrays.asList(
        new BasicHeader("Authorization", "Bearer " + accessToken)
    ))
    .build();

HttpGet httpGet = new HttpGet("https://example.com");
CloseableHttpResponse response = httpClient.execute(httpGet);

4. 在URL中添加token

除了在请求头或请求体中添加 token,我们还可以将 token 直接添加到 URL 中,例如:

String accessToken = "your_token_here";
String urlWithToken = "https://example.com?token=" + accessToken;

Request request = new Request.Builder()
    .url(urlWithToken)
    .build();

OkHttpClient client = new OkHttpClient.Builder()
    .build();

Response response = client.newCall(request).execute();
总的来说,无论你使用哪种方式添加 token,都需要确保 token 的安全性,否则会造成安全漏洞。在获取 token 时需要采取安全性措施,例如加密,同时在传输过程中也需要加密等手段来确保安全性。