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

济南网站建设公司电子商务网站app推广接单网

济南网站建设公司电子商务网站,app推广接单网,杭州网站设计制作,江门网站建设教程需求场景 由于项目需要开发第三方接口给多个供应商#xff0c;为保证Api接口的安全性#xff0c;遂采用Api接口签名验证。 Api接口签名验证主要防御措施为以下几个#xff1a; 请求发起时间得在限制范围内请求的用户是否真实存在是否存在重复请求请求参数是否被篡改 项目…需求场景 由于项目需要开发第三方接口给多个供应商为保证Api接口的安全性遂采用Api接口签名验证。 Api接口签名验证主要防御措施为以下几个 请求发起时间得在限制范围内请求的用户是否真实存在是否存在重复请求请求参数是否被篡改 项目路径 https://gitee.com/charles_ruan/easy-sign 代码实现 不同的客户端有着不同的appSecret。 通过密钥可以为不同的客户端(调用方) 分配不同的appSecret来区分不同客户端app(调用方)。将获取到的appSecret 参与到sign(签名)的生成保证了客户端的请求签名是由我们后台控制的。 定义切面拦截带SignatureValidation方法。 获取方法上的参数存入SortedMap判断参数是否合法 判断appId是否存在对应的secret判断时间戳是否有效 进行签名校验 Slf4j Aspect public class SignAspect {Before(annotation(signatureValidation))public void doBefore(SignatureValidation signatureValidation) throws Throwable {// 接收到请求记录请求内容HttpServletRequest request ((ServletRequestAttributes) (RequestContextHolder.currentRequestAttributes())).getRequest();SortedMapString, String allParams HttpUtils.getAllParams(request);// 1、获取请求sign签名参数String sign allParams.get(sign);if (StrUtil.isBlank(sign)) {throw new RuntimeException(sign不能为空);}// 2、获取请求参数secretString appId allParams.get(appId);String appSecret getAppSecret(appId);if (StrUtil.isBlank(appSecret)) {throw new RuntimeException(appId不合法);}// 3、获取请求参数timestamp 时间戳String timestamp allParams.get(timestamp);if (StrUtil.isBlank(timestamp)) {throw new RuntimeException(timestamp不能为空);}//3. 比较时间120s内为合法请求if (Math.abs(Long.parseLong(timestamp) - System.currentTimeMillis()) 120000) {throw new RuntimeException(timestamp失效);}allParams.put(secret, appSecret);verifySign(allParams);}private void verifySign(SortedMapString, String allParams) {// 对方签名String sign allParams.get(sign);allParams.remove(sign);String mySign SecureUtil.md5(JSONUtil.toJsonStr(allParams)).toUpperCase();log.info(验签对方签名{}我方签名{}, sign, mySign);// 验签Assert.isTrue(StrUtil.equals(sign, mySign), 验签失败);}public String getAppSecret(String appId) {MapString, String map new HashMap();map.put(zs001, asd123fhg3b7fgh7dfg);map.put(ls001, hghfgh123btgfyh1212);return map.get(appId);} }利用nonce参数可以防止重复提交,在签名验证成功后判断是否重复提交,原理就是结合redis判断是否已经提交过 public boolean isReplayAttack(String appId, String timeStamp, String nonce, String signature) {StringBuilder redisKey new StringBuilder();redisKey.append(IS_REPLAY_ATTACK).append(:).append(Constant.APP_ID).append(:).append(appId).append(Constant.TIME_STAMP).append(:).append(timeStamp).append(Constant.NONCE).append(:).append(nonce).append(Constant.SIGN).append(:).append(signature);Object value redisTemplate.opsForValue().get(redisKey);if (value ! null StringUtils.equals(signature, value.toString()))return false;elseredisTemplate.opsForValue().set(redisKey, signature, 1000 * 50);return false;}标题复制10行并且每行大于10个字符 标题复制10行并且每行大于10个字符 标题复制10行并且每行大于10个字符 标题复制10行并且每行大于10个字符 标题复制10行并且每行大于10个字符 标题复制10行并且每行大于10个字符 标题复制10行并且每行大于10个字符 标题复制10行并且每行大于10个字符 标题复制10行并且每行大于10个字符 标题复制10行并且每行大于10个字符
http://www.w-s-a.com/news/576332/

相关文章:

  • 个人网站模板html5找公司网站建设
  • 找最新游戏做视频网站一个做网站的团队需要哪些人员
  • 威海市做网站的做网站很难吗
  • 广州房地产网站建设方案怎么免费申请网站
  • 免费生成网站软件下载影视公司名字取名
  • 网站公司提供程序免费的网页入口
  • jsp网站开发实例教学房产网站怎么做400电话
  • 网络营销方式及流程广州seo工作
  • 专业商城网站制作免费网页设计成品
  • 韩国优秀设计网站找做网站找那个平台做
  • 贵州省清镇市建设学校网站国家企业信用信息公示系统官网河北
  • 游戏界面设计网站网站建设问一问公司
  • 织梦网站模板如何安装教程视频国外哪些网站可以注册域名
  • 用群晖做网站网站中文名称注册
  • 做一个企业网站需要哪些技术app开发公司名字
  • 网站建设有技术的公司图片在线设计平台
  • 建公司网站的详细步骤关于进一步加强网站建设
  • 丰宁县有做网站的吗?维护一个网站一年多少钱
  • 杭州网站设计渠道wordpress购物主题
  • 山东政务网站建设文字logo免费设计在线生成
  • 韩雪个人网站唐山网络运营推广
  • 查建设工程业绩在哪个网站网站建设优化服务如何
  • 江苏省建设工程安全监督网站商洛网站制作
  • 海淀网站建设wzjs51网页设计页面配色分析
  • 网站的备案流程图垦利网站制作
  • 行业用品网站怎么建设外链买东西的网站都有哪些
  • 淘宝做促销的网站集团门户网站建设策划
  • 网站排行榜查询怎样把个人介绍放到百度
  • vps 网站上传河北省招投标信息网
  • 武进网站建设咨询网站定制公司选哪家