当前位置: 首页 > news >正文

苏州知名网站建设开发功能型网站有哪些

苏州知名网站建设开发,功能型网站有哪些,佛山哪个做网站的好,wordpress教程ftp前言 项目中遇到参数加密和返回结果加密的业务 这里写一下实现 一来加深记忆 二来为以后参考铺垫 需求 项目在开发中涉及到 登陆 发验证码 认证 等前期准备接口 这些接口需要单独处理 比如不加密 或者有其他的业务需求 剩下的是登陆成功以后的业务需求接口 针对入参和返回值…

前言

项目中遇到参数加密和返回结果加密的业务
这里写一下实现 一来加深记忆 二来为以后参考铺垫

需求

项目在开发中涉及到 登陆 发验证码 认证 等前期准备接口
这些接口需要单独处理 比如不加密 或者有其他的业务需求

剩下的是登陆成功以后的业务需求接口 针对入参和返回值做了RSA AES加密
需求大概是这样 下面看下代码实现逻辑

实现

在网络框架的配置类里添加加密拦截器

 HttpsUtils.SSLParams sslParams = HttpsUtils.getSslSocketFactory();OkHttpClient.Builder mOkHttpBuilder = new OkHttpClient.Builder().connectTimeout(CONN_TIME_OUT, TimeUnit.SECONDS).readTimeout(READ_TIME_OUT, TimeUnit.SECONDS).writeTimeout(WRITE_TIME_OUT, TimeUnit.SECONDS).sslSocketFactory(sslParams.sSLSocketFactory, sslParams.trustManager).addInterceptor(new EncryptionInterceptor()) //加密拦截器 统一处理

解析

我的业务场景是 前期的 登陆 发验证码 认证 接口不需要做加密
所以我需要在加密拦截器前期做单独处理

 		 //认证接口不处理加密需求if (url.encodedPath().equals("xxx/auth")) {return chain.proceed(request);}//登陆和验证码都是get接口所以在这里统一拦截 if (method.equals("get") || method.equals("delete")) {return chain.proceed(request);}

处理完特殊业务场景 就剩统一的post接口 参数统一封装成body

 		 //请求接口请求参数String param = InterceptorUtils.bodyToString(request);//获取加密的keyString aesKey = Hawk.get(AppCode.AES_EKY);String encryptData = AESUtils.encrypt(param, aesKey);//拿到加密后的json字符串String json = new Gson().toJson(new JsonRequest(encryptData));RequestBody body = RequestBody.create(request.body().contentType(), json);request = request.newBuilder().post(body).build();Response response = chain.proceed(request);

下图是加密后的参入 统一用data作为加密key-valuekey用于后端解析
1
再来看一下返回值解密的代码实现 这里有2个点需要注意一下
对于后端返回的类型 无非是对象Object或者数组Array 2种情况 统一封装
先来看一下返回的加密格式

 {"code":20000,"data":"N1bBAjZ4m6PGGWJmu53PzSOcyjjUL0Jo3UITcEgmxYWcnBZSXKXRK81bS65JVoB8ouAuBLSSQvzVxHAc/pRbdUentgpppoe8wfhKvLuVu9LhVPK9y6I9/rf5nNm4h0+R62ubdUNINLsi6tl+j/Gn/gMPAzIoEFtVyQMQvHJ1sH4uh4as0Tnxu51aEknNc8Pm","errorId":"","message":"操作成功"}

2
上图中,data是我们的业务返回数据 它可能是Array也可能是Object
encryptData 加密字符串

	//说明是数组if (encryptData != null && encryptData.startsWith("[")) {JSONArray jsonArray = JSONArray.parseArray(encryptData);decryptObj.setData(jsonArray);} else if (encryptData != null && encryptData.startsWith("{")) {//说明是对象JSONObject jsonObject = JSONObject.parseObject(encryptData);decryptObj.setData(jsonObject);}

EncryptionInterceptor 实现

public class EncryptionInterceptor implements Interceptor {@Overridepublic Response intercept(Chain chain) throws IOException {Request request = chain.request();okhttp3.HttpUrl url = request.url();String method = request.method().toLowerCase().trim();//认证接口不处理加密需求if (url.encodedPath().equals("/isp/app/worker/auth")) {return chain.proceed(request);}if (method.equals("get") || method.equals("delete")) {return chain.proceed(request);}//请求接口请求参数String param = InterceptorUtils.bodyToString(request);//获取加密的keyString aesKey = Hawk.get(AppCode.AES_EKY);String encryptData = AESUtils.encrypt(param, aesKey);//拿到加密后的json字符串String json = new Gson().toJson(new JsonRequest(encryptData));RequestBody body = RequestBody.create(request.body().contentType(), json);request = request.newBuilder().post(body).build();Response response = chain.proceed(request);return Decrypt(response);}/*** 返回值解密* @param response 返回值* @return response*/private Response Decrypt(Response response) {try {Response.Builder builder = response.newBuilder();Response clone = builder.build();//成功 判断是否等于200if (clone.code() != 200) {return response;}ResponseBody body = clone.body();if (body != null) {MediaType mediaType = body.contentType();if (mediaType != null) {if (InterceptorUtils.isText(mediaType)) {String aesKey = Hawk.get(AppCode.AES_EKY);BaseResult result = new Gson().fromJson(body.string(),BaseResult.class);String encryptData = AESUtils.decrypt(result.getData().toString(), aesKey);ALog.e("解密返回数据 ->" + encryptData);BaseResult decryptObj = new BaseResult();decryptObj.setCode(result.getCode());decryptObj.setErrorId(result.getErrorId());decryptObj.setMessage(result.getMessage());//说明是数组if (encryptData != null && encryptData.startsWith("[")) {JSONArray jsonArray = JSONArray.parseArray(encryptData);decryptObj.setData(jsonArray);} else if (encryptData != null && encryptData.startsWith("{")) {//说明是对象JSONObject jsonObject = JSONObject.parseObject(encryptData);decryptObj.setData(jsonObject);}String strJson = new Gson().toJson(decryptObj);body = ResponseBody.create(mediaType, strJson);return response.newBuilder().body(body).build();}}}} catch (Exception e) {ALog.e("解密错误:" + e.getMessage());}return response;}
}

有什么问题欢迎交流~

http://www.yayakq.cn/news/201607/

相关文章:

  • 最大的网站建设公司排名wordpress手机iOS
  • 网站建设话术关键词房屋室内装修设计
  • 自贡市规划建设局网站一个公司可以备案两个网站
  • 高端品牌网站设计欣赏中铁建设集团有限公司招聘
  • 襄樊建设网站南京米雅途做网站如何
  • 外贸建站网站公司郑州三附院不孕不育科专家
  • 怎么才能建立一个网站卖东西成都百度推广公司地址
  • 金华seo建站用台式机做网站服务器
  • 长沙网站建设做得好的scala网站开发
  • 我的文档上传到网站 做链接潍坊昌乐县城乡建设局网站
  • 公司网站的管理和维护郑州汉狮做网站费用
  • 宜昌市住房和城乡建设官方网站未备案网站查询
  • 网站开发质量管理凡科建站多少钱
  • 商丘给企业做网站的公司平面设计专业网站
  • 音乐播放器网站怎么做wordpress php淘宝客模版
  • 钓鱼网站代做做衣服视频有些什么网站
  • 做服装哪个网站图片多安庆公司做网站
  • 深圳做网站大公司建筑公司网站案例
  • 龙口建网站首选公司wordpress做官网
  • 大连网站建设选高合科技网络服务器无响应可能原因
  • 辽宁营销型网站建设三亚网站开发
  • 淄博网赢网站建设php源代码做网站
  • 迁安做网站中的cms润强网站外部链接怎么做
  • 打开自己的网站是别人的域深圳福田公司有哪些
  • 响应式网站 英语企业主页怎么做
  • 蓝色的包装材料企业网站模板一个网站可以设多少关键词
  • 沧州营销型网站建设企业如何注册网站
  • 学做室内效果图的网站建设银行贵金属网站
  • 外贸商城 网站建设高德地图可以看国外的地图吗
  • 广州家具网站建设做网站和做商城的区别在哪里