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

单位网站建设工作功劳seo教程之关键词是什么

单位网站建设工作功劳,seo教程之关键词是什么,社保个人网站入口,招聘网站的SEO怎么做需求场景 由于项目需要开发第三方接口给多个供应商,为保证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.dinnco.com/news/28670.html

相关文章:

  • 下载好的网站模板怎么用怎么创建网站赚钱
  • 山西疫情最新情况政策网络优化的流程
  • 做网站的关键词怎么判断好不好网站代运营价格
  • 做旅游网站目的和意义360网站推广怎么做
  • 济宁嘉祥网站建设长沙seo推广外包
  • 网站建设功能清单百度网站官网入口网址
  • 专业网站建设效果韶关seo
  • 网站建设的威胁可以入侵的网站
  • wordpress微信免签约支付插件上海seo网站排名优化公司
  • 计算机做网站开发需要什么证书免费建站建站abc网站
  • 广州 环保 凡人网站建设购买域名的网站
  • 网站建设价目注册网站怎么注册
  • 德语网站制作网络营销专业代码
  • 公司网站备案怎么做销售管理系统
  • 建设网站专业公司关键词搜索引擎又称为
  • 维护网站一年多少钱怎么做好网站搜索引擎优化
  • 企业建设网站公司哪家好西安网站建设平台
  • 一个网站的主题和设计风格夫唯seo培训
  • dede网站单页面怎么做优化设计答案大全英语
  • 购物网站用那个软件做网络营销有哪些例子
  • 面板安装wordpressseo系统
  • 用dw做网站怎么单独修改字体免费推广软件哪个好
  • 网站建设最贵多少钱想要网站推广版
  • 免费打开的网站有什么推广软件
  • 合肥网站开发网络公司培训网
  • 网站 aspx 模板公司官网优化方案
  • 广州知名网站建设公司淘宝店铺转让价格表
  • 商洛网站建设网络推广员要怎么做
  • 知名网站设计服务商品牌运营策划
  • 开网站做什么seo交流博客