使用场景(有可能部分是开发后期添加的需求)
- 接口加密,需要app对接口数据解密
- 公共请求头
- 统一处理某个code,如登录超时对应的code
- 等
见代码
httpBuilder = new OkHttpClient().newBuilder();
httpBuilder.addInterceptor(chain -> {
Request request = chain.request();
Response response = chain.proceed(request);
ResponseBody responseBody = response.body();
String respBody = null;
if (responseBody != null) {
BufferedSource source = responseBody.source();
source.request(Long.MAX_VALUE);
Buffer buffer = source.buffer();
Charset charset = Charset.forName("UTF-8");
MediaType contentType = responseBody.contentType();
if (contentType != null) {
try {
charset = contentType.charset(Charset.forName("UTF-8"));
} catch (UnsupportedCharsetException e) {
e.printStackTrace();
}
}
//接口返回的加密数据
respBody = buffer.clone().readString(charset);
}
try {
//这里具体参考自己项目的加密方式
byte[] bytes = EncryptUtils.decryptHexStringAES(respBody, "密钥", "AES/CBC/PKCS5Padding","偏移量".getBytes());
//解密后的数据
String decryptedData = new String(bytes);
//返回新创建的response
return response.newBuilder().body(ResponseBody.create(MediaType.get("text/plain"), decryptedData)).build();
} catch (Exception e) {
e.printStackTrace();
}
return response;
});
参考文章:
添加链接描述
仅此记录,如有错误欢迎指正,谢谢