前言

从网上查了好多文章,不知道是不是版本问题,发现他们的都不管用,于是自己看了下源码,自己改了下

源码

import okhttp3.MediaType
import okhttp3.RequestBody
import okhttp3.ResponseBody
import retrofit2.Converter
import retrofit2.Retrofit
import java.lang.reflect.Type/*** creator: lt.dygzs@qq.com* effect : 网络请求加解密* warning:*/
class EncryptionAndDecryptionUtil : Converter.Factory() {/*** 加密:Part,PartMap,Body*/class EncryptionConverter<T>(val type: Type) : Converter<T, RequestBody> {companion object {val mediaType = MediaType.parse("application/json;charset=UTF-8")}override fun convert(value: T): RequestBody =RequestBody.create(mediaType, encode(javaToJson(value, type)))}/*** 加密:FieldMap,Field,HeaderMap,Header,QueryMap,QueryName,Query,Path*/class EncryptionSingleConverter<T>(val type: Type) : Converter<T, String> {override fun convert(value: T): String =encode(javaToJson(value, type))}/*** 解密*/class DecryptionConverter<T>(val type: Type) : Converter<ResponseBody, T> {override fun convert(value: ResponseBody): T? =javaJsonToAny(decode(value.string()), type) as? T}/*** 发送请求之前做转换:加密*/override fun requestBodyConverter(type: Type,parameterAnnotations: Array<Annotation>,methodAnnotations: Array<Annotation>,retrofit: Retrofit): Converter<*, RequestBody> =EncryptionConverter<Any?>(type)/*** 响应数据后做转换:解密*/override fun responseBodyConverter(type: Type,annotations: Array<Annotation>,retrofit: Retrofit): Converter<ResponseBody, *> =DecryptionConverter<Any?>(type)/*** 发送请求之前做转换:加密*/override fun stringConverter(type: Type,annotations: Array<Annotation>,retrofit: Retrofit): Converter<*, String>? =EncryptionSingleConverter<Any?>(type)//这里有几个方法需要你自己去实现,分别是://encode,加密的方法//decode,解密的方法//javaToJson,把对象转换成jsonString//javaJsonToAny,把jsonString转换成对象
}

网上的加密都只重写了requestBodyConverter()而没有重写stringConverter(),通过源码(retrofit2.RequestFactory.Builder.parseParameterAnnotation())看到,他们是处理不同的注解的参数的,参考上面源码里我写的注释

最后在构建Retrofit.Builder()的时候把该类附加上去:

retrofit.addConverterFactory(EncryptionAndDecryptionUtil())

end

使用Retrofit时,对参数进行加密相关推荐

  1. Retrofit 在拦截器中加密url 并修改body 参数key-value

    Retrofit 在拦截器中加密url 并修改body 参数key-value 从一个蛋疼的需求说起: URI加密:jjj/ 后面的URI采用AES-CBC-pkcs5padding加密后再base6 ...

  2. 【JS 逆向百例】X球投资者社区 cookie 参数 acw_sc__v2 加密分析

    关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 文章目录 声明 逆向目标 抓包分析 加密查找 参数逆向 完整代码 JavaScript 加密代码 Python 测试代码 声明 ...

  3. python数组做参数_python完成数组格式的请求参数的加密计算

    #输入 '''order_id:31489 join_course[0][join_tel]:13130999882 join_course[0][join_name]:任学雨 join_course ...

  4. Jmeter请求参数MD5加密

    一般公司在接口传输时,安全起见,请求参数往往需要加密传输,比如常用的MD5和SHA-256加密.本文介绍如何使用jmeter对请求参数进行加密处理,然后作接口测试. 最简单的是使用内置函数digest ...

  5. Js参数RSA加密传输之jsencrypt.js的使用

    这篇文章主要介绍了Js参数RSA加密传输之jsencrypt.js的使用,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 注意几点: 1.参数传递的+号处理,在传输时会把+变成 ...

  6. vue-router路由中对query中的参数进行加密

    vue-router路由中对query中的参数进行加密 源码地址在文末 在创建路由的时候,添加两个方法 stringifyQuery: 序列化传入的query参数,方法可以接收一个对象参数 在new ...

  7. mysql属性配置提高查询_MYSQL性能优化-安装时优化参数配置提高服务性能

    MYSQL性能优化一直是个头痛的问题,目前大多都是直接把页面html静态页面或直接使用了缓存技术,下面我就mysql本身的性能优化来分享一下. 安装时优化参数配置提高服务性能 在Linux下安装Mys ...

  8. python语法中infile语句_浅谈pymysql查询语句中带有in时传递参数的问题

    直接给出例子说明: cs = conn.cursor() img_ids = [1,2,3] sql = "select img_url from img_url_table where i ...

  9. XamarinAndroid组件教程设置动画的时长参数

    XamarinAndroid组件教程设置动画的时长参数 在添加动画的时候,开发者还可以动画参数进行设置,如动画持续的时长.插值器等.下面依次讲解动画参数的设置方法. 1.设置动画时长 设置动画持续的时 ...

最新文章

  1. SAP MM 带有Return标记的STO,不能创建内向交货单?
  2. 机房存在哪些安全隐患?需要排查哪些地方?
  3. 【模板】可持久化并查集
  4. Android复制assets目录下的图片到内存
  5. 占用较多堆外内存的区域
  6. 希尔排序java实现
  7. pythoning——11、正则匹配
  8. 2011年4月51CTO壁纸点评活动获奖名单【已结束】
  9. 另一个角度看Java常量池
  10. 一大波问题解决和配置备份 WCF快炼成精了
  11. 第24周SDAI缓解能否预测远期RA骨破坏受抑制
  12. 基于Matlab科技论文绘图:plot、imagesc
  13. easyRobot工业机器人系统
  14. Redis中的事务和三特性
  15. 反锐化掩膜_带噪声抑制的反锐化掩模图像增强算法
  16. kali中netspeed的安装方法
  17. BestMPRBaseVtk-003-修改工程,搬运官方代码并尝试理解-2
  18. 如何系统学习区块链技术-干货来袭
  19. 利用webSocket实现扫码登录PC端
  20. java bean 优缺点_Java Bean Copy框架性能对比

热门文章

  1. 文科生如何理解深度学习?
  2. 小白入门深度学习 | 第五篇:数据不均衡的处理方法
  3. 【Linux】8_存储管理逻辑卷LVM
  4. 代码实例--请求的转发:RequestDispatcher对象处理请求的两个方法--forward和include
  5. Int,Long比较重使用equal替换==
  6. 实例详解 EJB 中的六大事务传播属性--转
  7. 消费金融首推即时沟通工具“马上”探索科技金融发展新方向
  8. Sklearn(v3)——SVM理论(4)
  9. 【风控场景】互利网上数字金融典型场景: 网络支付
  10. MyBatis-Plus selectMapsPage报错