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

电子商务网站策划书3000字青岛网站建设工作室织梦模板

电子商务网站策划书3000字,青岛网站建设工作室织梦模板,公司网站维护教程,做网站市场价格多少钱需求场景 由于项目需要开发第三方接口给多个供应商,为保证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/260387/

相关文章:

  • 四川专业网站建设建e室内设计网案例
  • 如何创建一个自己公司网站手机网站可以直接做百度推广不
  • 网站网页设计多少钱高安网站建设
  • 深圳多语言网站建设dedecms网站信息统计
  • 网站做下子压缩文件的链接制作相册小程序
  • 佛山做外贸网站推广部队网站模板jsp
  • 织梦 网站图标excel表格做网站
  • 织梦制作手机网站模板免费下载微信与与网站建设
  • 响应式手机网站模版seo优化网站建设
  • 双语网站方法如何去除网站外链
  • 关于网站设计的书wordpress设置超链接
  • wordpress模板适合做什么站wordpress提交360
  • 水头网站建设网站开发软件设计文档模板
  • 家庭网络建站庆云网站seo
  • 四川省商投建设公司官网365优化大师软件下载
  • 怎样建设那种游戏网站外贸网站建设平台有哪些
  • 做化验的网站台州市网站制作
  • 四川集团网站建设上海公司查名一网通
  • 无锡建设局评职称网站网站如何做的有气质
  • 半岛官方网站下载网站建设腾讯课堂
  • 国外设计网站怎么登陆建设体育用品网站分析
  • 兴华建设集团有限公司网站jsp电商网站开发流程
  • 山东省住房和城乡建设厅网站主页浙江省网站建设报价
  • 网站简约式布局特点女生学软件工程很难吗
  • 企业怎样建立自己的网站手机设计网
  • 做电商网站用什么系统省建设厅网站二建考试
  • 东莞网站建设专业品牌实训百度搜索引擎的总结
  • 如何做网站内页排名静态网页制作期末试卷及答案
  • 合肥网站制作需织梦做的网站织梦修改网页
  • 中国建设银行网站官网下载企业培训计划方案