日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

使用Retrofit时,对参数进行加密

發(fā)布時(shí)間:2025/3/21 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用Retrofit时,对参数进行加密 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

從網(wǎng)上查了好多文章,不知道是不是版本問題,發(fā)現(xiàn)他們的都不管用,于是自己看了下源碼,自己改了下

源碼

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 : 網(wǎng)絡(luò)請(qǐng)求加解密* 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}/*** 發(fā)送請(qǐng)求之前做轉(zhuǎn)換:加密*/override fun requestBodyConverter(type: Type,parameterAnnotations: Array<Annotation>,methodAnnotations: Array<Annotation>,retrofit: Retrofit): Converter<*, RequestBody> =EncryptionConverter<Any?>(type)/*** 響應(yīng)數(shù)據(jù)后做轉(zhuǎn)換:解密*/override fun responseBodyConverter(type: Type,annotations: Array<Annotation>,retrofit: Retrofit): Converter<ResponseBody, *> =DecryptionConverter<Any?>(type)/*** 發(fā)送請(qǐng)求之前做轉(zhuǎn)換:加密*/override fun stringConverter(type: Type,annotations: Array<Annotation>,retrofit: Retrofit): Converter<*, String>? =EncryptionSingleConverter<Any?>(type)//這里有幾個(gè)方法需要你自己去實(shí)現(xiàn),分別是://encode,加密的方法//decode,解密的方法//javaToJson,把對(duì)象轉(zhuǎn)換成jsonString//javaJsonToAny,把jsonString轉(zhuǎn)換成對(duì)象 }

網(wǎng)上的加密都只重寫了requestBodyConverter()而沒有重寫stringConverter(),通過源碼(retrofit2.RequestFactory.Builder.parseParameterAnnotation())看到,他們是處理不同的注解的參數(shù)的,參考上面源碼里我寫的注釋

最后在構(gòu)建Retrofit.Builder()的時(shí)候把該類附加上去:

retrofit.addConverterFactory(EncryptionAndDecryptionUtil())

end

總結(jié)

以上是生活随笔為你收集整理的使用Retrofit时,对参数进行加密的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。