使用Retrofit时,对参数进行加密
前言
从网上查了好多文章,不知道是不是版本问题,发现他们的都不管用,于是自己看了下源码,自己改了下
源码
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时,对参数进行加密相关推荐
- Retrofit 在拦截器中加密url 并修改body 参数key-value
Retrofit 在拦截器中加密url 并修改body 参数key-value 从一个蛋疼的需求说起: URI加密:jjj/ 后面的URI采用AES-CBC-pkcs5padding加密后再base6 ...
- 【JS 逆向百例】X球投资者社区 cookie 参数 acw_sc__v2 加密分析
关注微信公众号:K哥爬虫,持续分享爬虫进阶.JS/安卓逆向等技术干货! 文章目录 声明 逆向目标 抓包分析 加密查找 参数逆向 完整代码 JavaScript 加密代码 Python 测试代码 声明 ...
- python数组做参数_python完成数组格式的请求参数的加密计算
#输入 '''order_id:31489 join_course[0][join_tel]:13130999882 join_course[0][join_name]:任学雨 join_course ...
- Jmeter请求参数MD5加密
一般公司在接口传输时,安全起见,请求参数往往需要加密传输,比如常用的MD5和SHA-256加密.本文介绍如何使用jmeter对请求参数进行加密处理,然后作接口测试. 最简单的是使用内置函数digest ...
- Js参数RSA加密传输之jsencrypt.js的使用
这篇文章主要介绍了Js参数RSA加密传输之jsencrypt.js的使用,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下 注意几点: 1.参数传递的+号处理,在传输时会把+变成 ...
- vue-router路由中对query中的参数进行加密
vue-router路由中对query中的参数进行加密 源码地址在文末 在创建路由的时候,添加两个方法 stringifyQuery: 序列化传入的query参数,方法可以接收一个对象参数 在new ...
- mysql属性配置提高查询_MYSQL性能优化-安装时优化参数配置提高服务性能
MYSQL性能优化一直是个头痛的问题,目前大多都是直接把页面html静态页面或直接使用了缓存技术,下面我就mysql本身的性能优化来分享一下. 安装时优化参数配置提高服务性能 在Linux下安装Mys ...
- python语法中infile语句_浅谈pymysql查询语句中带有in时传递参数的问题
直接给出例子说明: cs = conn.cursor() img_ids = [1,2,3] sql = "select img_url from img_url_table where i ...
- XamarinAndroid组件教程设置动画的时长参数
XamarinAndroid组件教程设置动画的时长参数 在添加动画的时候,开发者还可以动画参数进行设置,如动画持续的时长.插值器等.下面依次讲解动画参数的设置方法. 1.设置动画时长 设置动画持续的时 ...
最新文章
- SAP MM 带有Return标记的STO,不能创建内向交货单?
- 机房存在哪些安全隐患?需要排查哪些地方?
- 【模板】可持久化并查集
- Android复制assets目录下的图片到内存
- 占用较多堆外内存的区域
- 希尔排序java实现
- pythoning——11、正则匹配
- 2011年4月51CTO壁纸点评活动获奖名单【已结束】
- 另一个角度看Java常量池
- 一大波问题解决和配置备份 WCF快炼成精了
- 第24周SDAI缓解能否预测远期RA骨破坏受抑制
- 基于Matlab科技论文绘图:plot、imagesc
- easyRobot工业机器人系统
- Redis中的事务和三特性
- 反锐化掩膜_带噪声抑制的反锐化掩模图像增强算法
- kali中netspeed的安装方法
- BestMPRBaseVtk-003-修改工程,搬运官方代码并尝试理解-2
- 如何系统学习区块链技术-干货来袭
- 利用webSocket实现扫码登录PC端
- java bean 优缺点_Java Bean Copy框架性能对比
热门文章
- 文科生如何理解深度学习?
- 小白入门深度学习 | 第五篇:数据不均衡的处理方法
- 【Linux】8_存储管理逻辑卷LVM
- 代码实例--请求的转发:RequestDispatcher对象处理请求的两个方法--forward和include
- Int,Long比较重使用equal替换==
- 实例详解 EJB 中的六大事务传播属性--转
- 消费金融首推即时沟通工具“马上”探索科技金融发展新方向
- Sklearn(v3)——SVM理论(4)
- 【风控场景】互利网上数字金融典型场景: 网络支付
- MyBatis-Plus selectMapsPage报错