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

佛山网站制作专家网站系统分析

佛山网站制作专家,网站系统分析,app线下推广怎么做,手机网站特效代码需求场景 由于项目需要开发第三方接口给多个供应商,为保证Api接口的安全性,遂采用Api接口签名验证。 Api接口签名验证主要防御措施为以下几个: 请求发起时间得在限制范围内请求的用户是否真实存在是否存在重复请求请求参数是否被篡改 项目…

需求场景

由于项目需要开发第三方接口给多个供应商,为保证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();SortedMap<String, 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(SortedMap<String, 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) {Map<String, 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.yayakq.cn/news/813235/

相关文章:

  • 深圳网站程序开发制作平台手机app开发
  • 漳州城乡建设局网站首页有客多小程序
  • 外贸自建站多少钱百度灰色关键词代做
  • 网站外链软件网页设计代码模板html静态
  • 广陵建设局网站建设集团网站公司
  • 已有的网站如何做排名优化外贸用什么网站好
  • 分红盘网站开发多少钱网站建设骗
  • 上海网站建设哪家专业html5 网站模版
  • 免费建网站教程旅游网页模板素材
  • 做网站要用什么软件图文教程网站培训制度
  • 最早做淘宝返利的网站电子商务网站的特色
  • 站长工具seo综合查询全面解析做pc端网站价位
  • 宝安西乡做网站丽江网站开发
  • 无锡网站制作排名微信商城模板
  • 做网站用哪个写比较好wordpress评论区插件
  • 做类似58同城的网站创建网站时可使用的数据库有
  • 深圳企业网站建设制作wordpress留言标签板
  • 做骗子网站学网站建设需要什么软件有哪些
  • 北京网站开发网络公司吉林最新消息今天新增
  • 兰州展柜公司网站建设上海市有哪些公司
  • 建设网站申请空间需要多少钱wordpress调用二级分类目录
  • 国内最大的软件开发商成都官网seo厂家
  • 做医药代表去什么招聘网站seo网站优化方法
  • 网站建设费计入什么科目比较好<网站建设与运营》
  • 河北通信网站建设网站建设怎么用长尾做标题
  • 建设银行网站查余额阜阳市建设工程质量检测站网站
  • 惠州营销网站建设公司互联网技术包括哪些
  • 网站的代码在哪里设置北京王府井在几环
  • 苏州网络科技公司建网站整个网站全是图片做的
  • 制作网页心得做网站优化好的网络公司