RxEasyHttp网络库动态参数(六)

github源码地址:https://github.com/zhou-you/RxEasyHttp

动态参数

动态参数就是像我们的token、时间戳timeStamp、签名sign等,这些参数不能是全局参数因为是变化的,设置成局部参数又太麻烦,每次都要获取。token是有有效时间的或者异地登录等都会变化重新获取,时间戳一般是根据系统的时间,sign是根据请求的url和参数进行加密签名一般都有自己的签名规则。有的接口需要这些参数有的接口不需要,本库很好的解决这个问题。

1.在请求的时候可以设置下面三个参数

.accessToken(true)//本次请求是否追加token
.timeStamp(false)//本次请求是否携带时间戳
.sign(false)//本次请求是否需要签名

2.需要继承库中提供的动态拦截器BaseDynamicInterceptor

继承BaseDynamicInterceptor后就可以获取到参数的设置值,请详细看CustomSignInterceptor的注释讲解,也可以查看Demo示例
示例:

/**
 * 

描述:对参数进行签名、添加token、时间戳处理的拦截器

* 主要功能说明:
* 因为参数签名没办法统一,签名的规则不一样,签名加密的方式也不同有MD5、BASE64等等,只提供自己能够扩展的能力。
* 作者: zhouyou
* 日期: 2017/5/4 15:21
* 版本: v1.0
*/ public class CustomSignInterceptor extends BaseDynamicInterceptor { @Override public TreeMap dynamic(TreeMap dynamicMap) { //dynamicMap:是原有的全局参数+局部参数 //你不必关心当前是get/post/上传文件/混合上传等,库中会自动帮你处理。 //根据需要自己处理,如果你只用到token则不必处理isTimeStamp()、isSign() if (isTimeStamp()) {//是否添加时间戳,因为你的字段key可能不是timestamp,这种动态的自己处理 dynamicMap.put(ComParamContact.Common.TIMESTAMP, String.valueOf(System.currentTimeMillis())); } if (isSign()) {是否签名 //1.因为你的字段key可能不是sign,这种需要动态的自己处理 //2.因为你的签名的规则不一样,签名加密方式也不一样,只提供自己能够扩展的能力 dynamicMap.put(ComParamContact.Common.SIGN, sign(dynamicMap)); } if (isAccessToken()) {//是否添加token String acccess = TokenManager.getInstance().getAuthModel().getAccessToken(); dynamicMap.put(ComParamContact.Common.ACCESSTOKEN, acccess); } //Logc.i("dynamicMap:" + dynamicMap.toString()); return dynamicMap;//dynamicMap:是原有的全局参数+局部参数+新增的动态参数 } //示例->签名规则:POST+url+参数的拼装+secret private String sign(TreeMap dynamicMap) { String url = getHttpUrl().url().toString(); url = url.replaceAll("%2F", "/"); StringBuilder sb = new StringBuilder("POST"); sb.append(url); for (Map.Entry entry : dynamicMap.entrySet()) { sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&"); } sb.append(AppConstant.APP_SECRET); HttpLog.i(sb.toString()); return MD5.encode(sb.toString()); } }

3.设置自定义的动态拦截器

最好通过全局的方式设置,因为一般很多接口都会使用到

 EasyHttp.getInstance()
                 ...
                .addInterceptor(new CustomSignInterceptor())//添加动态参数(签名、token、时间戳)拦截器
                 ...

你可能感兴趣的:(RxEasyHttp网络库动态参数(六))