由于公司最近的这个项目要求保密性比较高,所以就要求我们在前后端传输上面做做文章了。
项目使用的是Retrofit框架,现在需要通过response中header的key作为密钥进行解密,常规的做法肯定是:在onResponse回调方法中,取出header,再解密。这种方法可以,但是不美观,耦合度太高。
我们知道Retrofit提供了Intercept和Converter.Factory接口, Interceptor是对请求和返回过程做处理,比如:添加头部信息,获取返回的头部信息。Converter.Factory是对请求body或者返回的body做处理。
需要注意的是Intercept运行是先于Converter.Factory的,这就提供了新的思路:在Intercept实例中获取respond中的header的key, 然后存下key,在Converter.Factory接口中拿着key进行解密。
/**
* author: liumengqiang
* Date : 2019/5/21
* Description : Retrofit拦截器
*/
public class RequestInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
/**
* 添加token思路
* 将token保存在配置文件中,
* 每次请求从配置文件中取出token的值添加到请求头中
*/
Request request = chain.request();
Request.Builder requestBuilder = request.newBuilder();
..........
Response response = chain.proceed(requestBuilder.build());
//这是解