retrofit/okhttp拦截器中对接口数据解密

使用场景(有可能部分是开发后期添加的需求)

  • 接口加密,需要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;
});

参考文章:
添加链接描述

仅此记录,如有错误欢迎指正,谢谢

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值