怎么让每个Http请求都自动带上token
更新时间:2023-11-061. 使用拦截器(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 时需要采取安全性措施,例如加密,同时在传输过程中也需要加密等手段来确保安全性。