使用Retrofit时,对参数进行加密
生活随笔
收集整理的這篇文章主要介紹了
使用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时,对参数进行加密的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更新至Android Studio4.1
- 下一篇: Kotlin 协程 + Spring w