个人网站建设方案书怎么写婚纱网站策划书模板

diannao/2026/1/20 7:19:04/文章来源:
个人网站建设方案书怎么写,婚纱网站策划书模板,发布软文广告,公司运营策划营销接口签名生成方式 前言 当某个系统对外部系统提供接口访问时#xff0c;为提高接口请求安全性#xff0c;往往会在接口访问时添加签名#xff0c;当外部系统访问本系统签名验证成功时才能正常返回数据#xff0c;一般接口提供方会与外部系统提前约定好#xff0c;不同外…接口签名生成方式 前言 当某个系统对外部系统提供接口访问时为提高接口请求安全性往往会在接口访问时添加签名当外部系统访问本系统签名验证成功时才能正常返回数据一般接口提供方会与外部系统提前约定好不同外部系统用 appKey 加以区分并且不同 appKey 对应不同秘钥secretKey 签名生成方式 以下以 Get 请求为例 第一步在请求参数中添加 appKey 和时间戳 timestamp将所有请求参数除了 sign 按照字母排序第二步使用将第一步参数拼接成如下形式 k1v1k2v2k3v3 … ,并且将秘钥secretKey拼接在最后最终字符串为 k1v1k2v2k3v3secretKey第三步将第二步中的字符串使用MD5加密生成签名sign 第四步将签名sign 作为入参传入 以Java代码为例 定义两个项目sign-provider 为接口提供方sign-consumer 调用 sign-provider 提供的接口 sign-provider 接口提供方提供接口为 http://127.0.0.1:9091/provider/hello?query2offset0limit10appKeyAsign{{sign}}timestamp{{timestamp}} 其中 appKey 参数非固定传值此处假设接口提供方与 sign-consumer 约定其 appKey 为 A secretKey秘钥 为 123456sign 由接口调用方 sign-consumer 根据入参和秘钥拼接并通过MD5加密生成具体规则看 签名生成方式 具体代码 package com.example.signprovider;import lombok.extern.slf4j.Slf4j; import org.springframework.util.Assert; import org.springframework.util.DigestUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import java.lang.reflect.Field; import java.nio.charset.StandardCharsets; import java.util.HashMap; import java.util.Map; import java.util.StringJoiner; import java.util.TreeMap;Slf4j RestController RequestMapping(/provider) public class HelloController {private static final long EXPIRE_TIME 5;/*** 不同系统对应不同 appKey 和 secretKey*/private static final MapString, String APP_KEY_MAP new HashMap();static {APP_KEY_MAP.put(A, 123456);}GetMapping(/hello)public String hello(RequestBean requestBean) {//获取客户端 appKeyString appKey requestBean.getAppKey();Assert.isTrue(APP_KEY_MAP.containsKey(appKey), 无效appKey);//客户端传入的签名String requestSign requestBean.getSign();//检查有无传入签名Assert.hasText(requestSign, 无效签名);long requestTime requestBean.getTimestamp();//如果请求发起时间与当前时间超过expireTime则接口请求过期Assert.isTrue(System.currentTimeMillis() / 1000 - requestTime EXPIRE_TIME, 请求过期);//生成签名String sign ;try {sign getSign(requestBean, APP_KEY_MAP.get(appKey));} catch (IllegalAccessException e) {e.printStackTrace();throw new RuntimeException(获取签名失败);}//比对签名与传入签名是否一致Assert.isTrue(requestSign.equals(sign), 无效签名);return 接口调用成功 requestBean;}private String getSign(RequestBean requestBean, String secretKey) throws IllegalAccessException {MapString, Object map new TreeMap(String::compareTo);Field[] fields requestBean.getClass().getDeclaredFields();for (Field field : fields) {if (!sign.equals(field.getName())) {field.setAccessible(true);map.put(field.getName(), field.get(requestBean));}}StringJoiner stringJoiner new StringJoiner();map.forEach((k, v) - stringJoiner.add(k v));log.debug(stringJoiner: stringJoiner);String paramStr stringJoiner secretKey;//MD5加密return DigestUtils.md5DigestAsHex(paramStr.getBytes(StandardCharsets.UTF_8));}}如上使用的MD5加密方法为 spring 提供的工具类 org.springframework.util.DigestUtils sign-consumer sign-provider 对外提供 API 为 http://127.0.0.1:9091/provider/hello?query2offset0limit10appKeyAsign{{sign}}timestamp{{timestamp}} 其中 appKey、sign、timestamp 等参数均可由系统内部提供所以 sign-consumer 对外提供接口为 http://127.0.0.1:9092/consumer/hello?query2offset0limit10 具体代码 package com.example.signconsumer;import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.ResponseEntity; import org.springframework.util.DigestUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate;import java.nio.charset.StandardCharsets; import java.util.Map; import java.util.StringJoiner; import java.util.TreeMap;Slf4j RestController RequestMapping(/consumer) public class ConsumerController {private static final String APP_KEY A;private static final String SECRET_KEY 123456;private static final String URL http://127.0.0.1:9091/provider/hello;Autowiredprivate RestTemplate restTemplate;GetMapping(/hello)public String hello(RequestBean requestBean) {//使用 TreeMap 可对key排序MapString, Object params new TreeMap();params.put(appKey, APP_KEY);params.put(timestamp, System.currentTimeMillis() / 1000);params.put(limit, requestBean.getLimit());params.put(offset, requestBean.getOffset());params.put(query, requestBean.getQuery());//生成签名String sign getSign(params);log.debug(sign:{}, sign);params.put(sign, sign);StringJoiner stringJoiner new StringJoiner();params.forEach((k, v) - stringJoiner.add(k v));ResponseEntityString result restTemplate.getForEntity(URL ? stringJoiner, String.class);return result.getBody();}private String getSign(MapString, Object params) {StringJoiner stringJoiner new StringJoiner();params.forEach((k, v) - stringJoiner.add(k v));log.debug(stringJoiner: stringJoiner);String paramStr stringJoiner.toString() SECRET_KEY;return DigestUtils.md5DigestAsHex(paramStr.getBytes(StandardCharsets.UTF_8));} }测试 浏览器调用 sign-consumer 提供的接口 代码路径 https://github.com/husgithub/sign-test git 地址 gitgithub.com:husgithub/sign-test.git通过 PostMan 测试 通过调用 sign-provider 提供的接口可以测试 sign-consumer 提供的功能是否正确PostMan 提供编写脚本的能力在 JS 脚本中我们可以生成 timestamp 、sign 参数的值 打开 PostMan 后定位到 Pre-request Script 栏可在此写 JS 脚本 脚本如下 console.log(start......); var timestamp Math.floor(new Date().getTime()/1000); pm.globals.set(timestamp, timestamp); console.log(----); console.log(request.url); //console.log(pm.request.url.query.get(timestamp)); var paramStr request.url.split(?)[1]; console.log(url参数字符串为paramStr); console.log(分割字符串参数......); var map new Map(); var paramArr paramStr.split(); for(var i0;iparamArr.length;i){var p paramArr[i].split();if(sign!(p[0])){if(timestampp[0]){map.set(p[0],timestamp);}else{map.set(p[0],p[1]);}} } console.log(paramArr); console.log(map.size);//对map排序 var arrayObj Array.from(map); arrayObj.sort(function (a, b) {return a[0].localeCompare(b[0]) }); var sortParamStr ; for (var [key, value] of arrayObj) {console.log(key value);sortParamStr keyvalue; } console.log(sortParamStr.substring(1)); //添加秘钥 var signStr sortParamStr.substring(1)123456; //生成签名 var sign CryptoJS.MD5(signStr).toString(); console.log(sign); pm.globals.set(sign, sign);如下图 通过 {{sign}} 的方式可以定义变量之后可以通过 js 脚本对变量进行赋值 通过 request.url 可以获取请求 URL request.urlpm.globals.set(“sign”, sign); 表示对 {{sign}} 括号内的参数赋值 pm.globals.set(sign, sign);测试 通过 View - Show Postman Console 可以打开 PostMan Console 控制台

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90038.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业搭建网站哪家好dz门户网站模板下载

在面向对象程式设计方法中,封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。要访问该类的代码和数据&am…

大连做公司网站哪家好国内房地产设计网站建设

接口错误提示如下 SAP官方 CJ067 124177 - VA01: CJ067 during WBS acct assgmt with a different business area S4的core 刚好能用上 实施 这个note后成功

高品质网站设计wordpress导入媒体查看

会议成果: 1.今天我们确定了软件版本的时间alphe版在12周做出来,在我们内部测试基本通过。 bate版在13周发布和其他组作交换测试,在14周release版发布并给其他人使用体验准备15周的演讲。 2.同时确定了部分功能实现顺序,”谁是卧底…

重庆网站推广流程微博营销的方法和手段

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…

天峨县建设局网站腾讯企业邮箱域名可以做网站吗

文 | 智能相对论 作者 | 沈浪 或许,谁也没想到未来应用来的如此之快,现如今传统应用从开发到体验,已经进入了一个前所未有的颠覆性改革阶段。 不久前,美国人工智能公司OpenAI举办开发者大会。在现场,公司创始人Sam …

做系统网站好可以做问卷挣钱的网站

随着人们生活质量日益提升,对其自身的居住环境也有了较高要求,每个人审美不一样,无论自己居住的房屋还是公司办公/商场等场景都需要设计不同的内容,还有各种设施的摆放及类别等都有讲究,尤其对公司及商场等环境&#x…

什么网站是vue做的wordpress去除手机版

Context Capture无法量测连接点,Surveys提示Read only只读模式 出现这个问题一般是因为当前block已经完成三维重建,所以无法再编辑稀疏重建(空三)结果。只能把当前block复制一份,在复制的block上量测新的连接点。如下…

图库网站cmswordpress 添加表情

搜索镜像 https://developer.aliyun.com/mirror/?serviceTypemirror&tag%E7%B3%BB%E7%BB%9F&keywordalmalinux dvd是有界面操作的,minimal是最小化只有命里行 镜像下载地址 安装和centos基本一样的,操作命令也是一样的,有需要我…

高端网站开发找哪家好wordpress树形导航注册

文章目录1. 题目2. 解题2.1 正常思维BFS2.2 逆向思考BFS1. 题目 你是个房地产开发商,想要选择一片空地 建一栋大楼。 你想把这栋大楼够造在一个距离周边设施都比较方便的地方,通过调研,你希望从它出发能在 最短的距离和 内抵达周边全部的建筑…

域名被墙检测网站北京双诚建设监理公司网站

又一项看似技术需求驱动,最终发现还是业务需求驱动的体系化建设。 0. 目录结构 1. 中拔出溜公司的特点2. 达成共识3. 推荐落地路线3.1 理论解析3.2 Loki Promtail Grafana 轻量级零侵入方案3.3 接入traceId3.4 基础设施监控 后记相关 1. 中拔出溜公司的特点 在传…

只买域名不建网站自己制作网站做外贸赚钱吗

本文用于检验学习效果,忘记知识就去文末的链接复习 1. ECMAScript介绍 ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言…

汕头网站搭建cnnic 网站

因为工作忙碌的关系,很长时间都没有来关注手机游戏论坛,这款富甲三国.雄霸天下,我也是前天才拿到手。游戏比想象中的简单,个人仅用了两个小时时间,就将三个人物全部通关。游戏的开始画面制作得比较精美,而且…

大连建设工程信息网下载中心太原seo建站

在进行数据分析时,我们往往会遇到要对某个变量的影响因素进行分析的情况,而影响一事物的因素往往是很多的。比如在化工生产中,有温度、压力、剂量、反应时间等因素。每一因素的改变都有可能影响产品的数量和质量。我们往往要找出对产品质量有…

php网站建设教程 电子书河北软文搜索引擎推广公司

1、建立一个文件夹,如pcl_demos,里面建立一个.cpp文件和一个cmake文件 2、打开终端并进入该文件夹下,建立一个build文件夹存放编译的结果并进入该文件夹 3、对上一级进行编译 cmake .. 4、生成可执行文件 make 5、运行该可执行文件 6、可视…

网站建设装修鱼泡建筑网

一只被母羊抛弃的小羊羔,来到我们住的蒙古包。在草原母羊拒绝让小羊吃奶是常有的现象,所以在老辈人中流传着《劝奶歌》,我听过几次,曲调哀婉,让人感动。在蒙古电影《哭泣的骆驼》中有过类似的细节。老人为了让抛弃小骆驼的母驼回心…

网站广告联盟怎么做的网址大全怎么删除

题目链接:leetcode 76 1.题目 给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 “” 。 注意: 对于 t 中重复字符,我们寻找的子字符串中该字符数…

美术馆网站建设要求宁波网站的建设

文章目录 1. 代码仓库2. 单源路径2.1 思路2.2 主要代码 3. 所有点对路径3.1 思路3.2 主要代码 4. 联通分量5. 环检测5.1 思路5.2 主要代码 6. 二分图检测6.1 思路6.2 主要代码6.2.1 遍历每个联通分量6.2.2 判断相邻两点的颜色是否一致 7. 最短路径问题7.1 思路7.2 代码 1. 代码…

学设计的网站都有哪些哪几个小说网站做网编拿的钱多

(Remember the Word ,LA 3942) 题目来源:https://vjudge.net/problem/UVALive-3942 题意:给定一个字符串S以及n个单词,字符用这n个单词进行拆分,输出拆分的方案数。 思路:dp字典树 可以先将这n个单词存储于字典树中&a…

域名等于网站网址吗襄阳论坛网站建设

外国友人仿照中国字谜设计了一个英文版猜字谜小游戏,请你来猜猜看吧。 字谜的迷面 puzzle 按字符串形式给出,如果一个单词 word 符合下面两个条件,那么它就可以算作谜底: 单词 word 中包含谜面 puzzle 的第一个字母。 单词 word…

网站制作步骤是什么wordpress禁止自动升级

RV32/64 特权架构 - 特权模式与指令 1 特权模式2 特权指令2.1 mret(从机器模式返回到先前的模式)2.2 sret(从监管模式返回到先前的模式)2.3 wfi(等待中断)2.4 sfence.vma(内存屏障) …