日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/21 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用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时,对参数进行加密的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。