前后端对请求参数排序

JS将参数生成签名,在请求头新增sign字段 阅读详情

签名校验相信不少小伙伴都有碰到过,微信jsapi集成、支付宝集成的时候都会需要加上签名。
这边记录一下当待签名内容是json字符串时的排序方法。

后端(java):
方法一:利用TreeMap
TreeMap本身就是有序集合,每一次插入删除都会进行排序。

Map<String, String> map = new TreeMap<String, String>();
JSONObject jp = new JSONObject();
for (Iterator<String> it = map.keySet().iterator(); it.hasNext();) {
    if (!"sign".equals(key)) {
        jp.put(key, map.get(key));
    }
}

方法二:利用List

Map<String, String> map = new HashMap<String, String>();
List<Map.Entry<String, String>> list=new ArrayList<>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<String, String>>() {
    @Override
    public int compare(Entry<String, String> o1,Entry<String,   String> o2) {           
        return o1.getKey().compareTo(o2.getKey());//这里如果是getValue的话就是根据value排序
            }
});

接下来遍历list,往JSONObject中put值就行了。

for (Entry<String, String> entry : list) {
    if (!"sign".equals(key)) {
        jp.put(entry.getKey(), entry.getValue());
    }
}

方法三:
利用Arrays.sort

Object[] key_arr = params.keySet().toArray();
Arrays.sort(key_arr);
for (Object key : key_arr) {
    if (!"sign".equals(key)) {
        jp.put(key, params.get(key));
    }
}   

注:以上import net.sf.json.JSONObject;

前端:
原生js中好像没有对JSON对象按键值排序的方法(反正我没找到- -),那么就只好自己手动拼装了。
当请求参数对象param都是string键值对时,可以用以下方法生成排好序的JSON字符串:

  var generateJson=function (param) {
    var keys=Object.keys(param).sort();
    var json="{";
    angular.forEach(keys,function (data) {
      json+='"'+data+'":"'+param[data]+'",';
    });
    json=json.substr(0,json.length-1);
    json+="}";
    return json;
  }

当param中存在某个key对应的value是对象而非字符串时,就要特殊处理一下了:

假设

var param={
  appVersion:‘1.0.0’,
  sysVersion:‘1.0.1’,
  deviceType:‘0’,
  deviceModel:‘Nokia’,
  fields:{
      a:'1',
      b:'2'
     }
  };

如果还用generateJson()方法,那么param[data]取到的将是[Object,Object],所以在拼装json字符串的时候,要将fileds先转换为字符串,即将fileds的值看做一个字符串。

 if(data=='fileds'){
    json+='"'+data+'":"'+JSON.stringify(param.fields)+',';
 }
深入浅出:Strapi REST API 中的 populate 参数详解(二)---- 获取嵌套数据 populate在 Strapi 中,populate是一个非常强大的工具,能够让你轻松地查询和填充关联数据。通过合理使用populate,你可以避免多次发送请求,从而优化前端与后端的交互。特别是在数据关系复杂的情况下,populate的多级查询能够帮助你一站式获取所需的所有数据。希望这篇文章帮助您更好地理解 Strapi 中的多级查询。通过合理使用populate,您可以高效地获取嵌套关系的数据。如果您有任何疑问或需要进一步的帮助,请随时与我联系!参考文档Strapi Populate 文档。 阅读详情

相关推荐

前后端API签名验证实战:HMAC-SHA256在若依与uni-app中的防篡改实现

在Web应用开发中,API接口安全是保障数据传输完整性与真实性的基石。其核心原理是通过客户端与服务端共享密钥,对请求参数进行加密哈希运算,生成唯一签名进行比对,从而验证请求的合法性与防篡改。这项技术的核心价值在于,它有效弥补了传统Token认证在防重放与防参数篡改方面的不足,为高频调用的业务接口提供了轻量级的安全保障。典型的应用场景包括移动端App与后端服务的通信、开放平台接口调用以及支付回调验证等。本文以若依(Spring Boot)后端与uni-app前端为例,深入解析了基于HMAC-SHA256的签名

weixin_42525738的博客 260

(#{}和${}的区别)前端向后端传入参数实现字段排序,参数信息正常,但是后台数据库查询返回的结果未排序

问题 前端向后端传参数,后端用自己封装的实体类Page来接收,目的是为了实现根据前端传入的字段sort和order进行正序或倒序排序,log日志显示传入的参数信息正常,但是查询返回的结果并没有进行排序,查询的sql语句如下: <select id="getAllUsers" resultMap="BaseResultMap" parameterType="com.hrms.utils.Pag...

发则韩的博客 2083

ArcGIS基础:点要素分割线要素和提取线要素的交点

第一个实验:【点要素分割线要素】看下原始数据:下图所示,2个红点和一条绿线,用2个点去分割这条线。 找到【数据管理工具】,在找到【要素】,再找到【在点处分割线】,如下图所示。 输入线、点要素,然后在【搜索半径】里输入5米,查看一下结果。 查看结果发现,线段被分割了2段,我们查看一下原因。 发现第2个点与线有一段距离,肯定是大于5米的,所以分割没有成功。可以量测一下距离,重新输入搜索半径。 我们把搜索半径改为200米,勘察结果,被点分割了3段。 接下来使用另外一个工具【在折点处分割线】,如下所示。

yuanYW7556的博客 1万+

根据前端实体类属性加排序方式传值,后端mybatis中排序,postgresql order by排序报错

bootstrap.js传值,把实体类属性和排序方式(entityPro asc)传到后端做排序,后台Dao层用的mybatis框架,数据库是postgresql,因为前台传的是实体类的属性(有驼峰)加排序方式,mybatis排序用的order by orderBy,其中{orderBy},其中orderBy,其中{orderBy}里内容就是实体类属性加排序方式,进行列表查询时排序就报错了! 查询语句是select a.entity_pro as “entityPro” from table_name a

漂浪的博客 1364

cellranger安装以及使用

接受cellranger count的输出数据,将同一组的不同测序样本的表达矩阵整合在一起,比如tumor组原来有4个样本,PBMC组有两个样本,现在可以使用aggr生成最后的tumor和PBMC两个矩阵,并且进行标准化去掉测序深度的影响。但是由于病毒基因组太小了,且注释结果只有CDS没有exon,所以曲线救国,将CDS整体替换为exon,也不进行过滤了,直接下一步。虽然安装完毕,但是现在要运行cellranger的话需要在终端输入cellranger的整个路径。自动执行这个命令,需要将“

m0_59974475的博客 9391

数据结构实验1.2—高精度计算PI值(西工大)

这是数据结构第二题的题目,是让我们根据用户的需求来计算派的值 这是题目的详细描述,刚看到这道题的时候,我是真的头大,完全没有思路,于是查找了一些大佬的笔记后才开始编写 这是我在写这些代码是所运用到的数学反三角函数幂次展开式的知识。 下面是正确的代码以及我的一些见解,和需要注意的一些地方。希望能对你有所帮助。如有更加精简的算法,请在评论区留下你的算法!!!谢谢!!! #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdl

abcdef0623的博客 5831

前端表格拖动排序 后端sql

表 如果把10条数据拖动到第2条的位置 [2,9]条数据的step+1 把step=10更改成step=2 如果把2条数据拖动到第10条的位置 [2,9]条数据的step-1 把step=2更改成step=10 dao //把beginIndex条数据拖动到第endIndex条数据上 //如果beginIndex>endIndex param=1 else param=-1 void so...

Mr_Li的博客 1542

【CTFSHOW】web入门 黑盒测试

文章目录写在前面web380web381web382web383web384web385web386web387web388web389web390web391web392web393web394web395参考资料 写在前面 一直没搞过渗透,先学学黑盒测试吧 web380 进入题目发现是一个关于灯泡的悲伤故事,点进去,看到跳转到page_1.php页面。 我们访问page.php试试: 发现报错:$id.php,可以猜想需要传名称为id的参数,来访问id.php。我们访问page.php?id=1试试

7ruth0hn的博客 1896

Java中解析前端传的Sql语句

使用Durid解析 首先将传递来的sql抽象成AST语法树,之后将表名和字段名存储到list集合中。 根据字段名和表名去数据库系统表中查询出对应字段的注释和字段类型。 //mySqlstatementParser为sql语句 MySqlStatementParser mySqlStatementParser = new MySqlStatementParser(sqlStr); //使用parpser解析生成的AST,这里sqlStatement是AST,AST为抽象语法树 SQLStatement

youngjre的博客 2638

AI Agent在营销领域的实战策略

本文从第一性原理出发,系统性拆解AI Agent在营销领域的落地逻辑、技术架构、实现方案与实战策略。全文覆盖从基础概念到高级优化的全层级知识:底层理论层面推导营销Agent的效用函数与决策框架;技术架构层面提出"感知-记忆-规划-行动-反思"五组件可落地架构;实践层面提供生产级代码实现、多行业案例与ROI提升方法论;前沿层面探讨多Agent协同、世界模型仿真等下一代技术方向。

操作系统内核探秘的博客 226

OpenCV计算机视觉实战(3)——计算机图像处理基础

本文全面介绍了计算机视觉和数字图像处理的基础知识。从最基本的像素概念入手,详细讲解了图像在计算机中的表示方式,包括RGB、CMYK等色彩空间的工作原理及其应用场景。还系统分析了常见图像和视频文件格式的特点,梳理了计算机图像处理技术的发展历程,并重点介绍了OpenCV这一强大的开源计算机视觉库的功能与应用领域。

qq_30167691的博客 1738

java与sql解决某段时间数据排序并反馈前端

本例子补充:用来说明 笔者本人某篇 日期往前推或后退一段时间 /** * 根据筛选条件 获取路名拥堵次数的排名 * @param latestDays 近三天,近七天,一个月,三个月 * @param peakTime "早高峰【07:00-09:00】" * @param ydjbcode "1"-畅通,"2"-缓行,"3"-拥挤,"4"-严重拥堵 */ public static Map<String, Object> getTop10Ydqk(String late

qq_23128255的博客 497

01-诊断开发流程概述

传送门 ==>> AutoSAR入门和实战系列总目录。

1784

js生成接口请求参数签名加密

js生成接口请求参数签名加密 定义规则:将所有参数字段按首字母排序, 拼接成key1 = value1 & key2 = value2的格式,再在末尾拼接上key = appSecret, 再做MD5加密生成sign,方法如下: function getSign(params, kAppKey, kAppSecret) { if (typeof params == "string"...

weixin_30851409的博客 1461

即插即用系列(代码实践)| GRSL 2024 ARConv核心模块:自适应矩形卷积——专为遥感图像设计,打破固定方形卷积束缚

摘要: 本文提出了一种用于遥感图像处理的自适应矩形卷积模块(ARConv),解决了传统方形卷积核在处理复杂几何结构(如细长道路、密集建筑物)时导致的光谱混叠和边缘模糊问题。ARConv通过动态调整卷积核的长宽比和旋转角度,使卷积核形状与地物特征自适应匹配。该模块可即插即用于全色锐化、语义分割等遥感任务,有效提升边缘保持能力和光谱保真度。核心代码基于PyTorch实现,包含偏移量生成和几何变换逻辑,支持梯度缩放以稳定训练。

分享顶会顶刊论文即插即用模块 140

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

API常用签名验证方法(PHP实现)

使用场景 现在越来越多的项目使用的前后端分离的模式进行开发,后端开发人员使用API接口传递数据给到前端开发进行处理展示,在一些比较重要的修改数据接口,涉及金钱,用户信息等修改的接口如果不做防护验证,经常容易被人恶意刷接口,导致巨大的损失。 API签名验证 这里我们引入业内比较通用的签名验证来对接口进行参数加密,有以下优势。 请求的唯一性:计算出的签名是唯一的,可以用来验证。 参数的可变性:参数中包含时间戳参数,这就保证每次的请求计算出得签名都是不一样的。 请求的时效:由于请求中带有当前发起请求的时间戳参数,

JiaSureZ的博客 495

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Django Ninja 列排序

我的框架 Ninja 版本老,要升级到新版才可以用这个排序方法;升级后框架不能登入,怕还有其它问题,又恢复回去了。...&field=working_time_summary&order=ascend 或 descend。添加了: sort_by: str = '', order: str = 'asc' 参数,新版Django-Ninja 有排序装饰器,可以进行字段排序。将查询集转换为列表之前对结果进行排序。NIJIA 后端的排序接口已经OK。# Python内存中进行排序。

2201_75765221的博客 507

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

SpringBoot前后端分离框架中,在请求头加入签名

import cn// 从配置文件读取密钥 @Value("${signature.secret}") private String SIGN_SECRET;// 签名有效时间(毫秒,例如5分钟) private static final long EXPIRE_TIME = 5 * 60 * 1000;// 1. 从请求头获取参数 String timestamp = request . getHeader("timestamp");

潜行者 336

签名验证,防止请求参数被篡改

本文介绍了前后端请求签名验证的实现机制,通过参数排序、密钥组合和MD5加密确保数据交互安全。前端对请求参数进行排序后,与密钥组合生成MD5签名,随请求一起提交。后端使用相同密钥验证签名。示例代码展示了前端签名生成过程:对参数键名排序后拼接密钥,进行MD5加密,并将签名加入请求数据。这种机制能有效防止数据篡改,提升接口安全性。

漏网之鱼的博客 30

接口字段html文件,前后端交互接口规范

## 一、交互标准### 1、对于静态HTML/XML页面的数据请求与返回前端请求一个HTML/XML等文本格式页面用于渲染时,请统一使用GET请求。文本页面编码除特殊情况外,一律采用UTF-8编码格式。在后端返回的HTTP数据中,请确保Content-Type被设置并且为text/html,application/xhtml+xml或application/xml中的任意一个符合当前页面格式的值...

weixin_33622153的博客 920

HTTP请求加盐签名防篡改、防重放完整通用方案(前后端全套代码)

日常开发中,很多接口仅依赖做安全校验,但存在明显漏洞:HTTPS 只能防链路窃听,无法防止请求参数被篡改、恶意重放请求单纯 Token 仅校验身份,不校验请求参数完整性抓包工具可篡改 GET/POST 参数、伪造重复请求,造成数据错乱、业务漏洞本文提供一套企业级通用 HTTP 加盐签名方案,基于算法,结合时间戳、随机串、参数排序,完美实现防篡改、防重放、防伪造,适配所有请求方式,附前端JS、后端Java完整可运行代码,开箱即用。/*** 接口验签注解* 加此注解的接口需进行签名校验*/

小丑鱼 216

前后端分离架构下的接口签名安全方案

本文介绍了前后端分离架构下的接口签名方案,旨在解决数据伪造和重复调用等安全风险。签名流程包括客户端生成签名并添加到请求头,服务端验证签名后处理业务。签名规则要求请求头必须包含appId、随机数nonce、时间戳timestamp和签名signature。方案采用MD5加密算法,结合请求头、URL、参数和请求体生成签名。技术实现上使用Java过滤器进行签名验证,包含时间戳有效性检查、nonce防重放攻击等安全措施。该方案通过签名验证、时效控制等机制,有效防止数据伪造和重放攻击,为不同客户端提供区分标识,保障接

油墨香^-^的博客 1200

快应用在HTTP的body传入参数时会默认倒序

解决方案:后端对body进行倒序

XerCis的博客 656

基于实时参数的分页策略——商城APP应用场景分析

假设用户在翻页时,数据发生了更新(如某些商品被下架或价格波动),则传统分页可能会出现数据丢失或重复的情况。例如,用户翻到下一页时,可能会丢失已更新的数据或已经看到被删除的商品。由于商品的价格、库存、销量等数据是实时动态变化的,当用户应用筛选条件或排序规则时,传统的分页方式可能会导致以下问题:数据丢失、重复加载、性能瓶颈等。传统分页通常基于静态的页面代码或数据范围,每次请求时,页面根据指定的页面代码或偏移量来加载固定数量的数据。:只加载当前需要的数据,减少不必要的请求和数据传输,提高响应速度,提升前端性能。

m0_69786632的博客 2170

php api接口验证签名错误,API常用签名验证方法(PHP实现)

使用场景现在越来越多的项目使用的前后端分离的模式进行开发,后端开发人员使用API接口传递数据给到前端开发进行处理展示,在一些比较重要的修改数据接口,涉及金钱,用户信息等修改的接口如果不做防护验证,经常容易被人恶意刷接口,导致巨大的损失。API签名验证这里我们引入业内比较通用的签名验证来对接口进行参数加密,有以下优势。请求的唯一性:计算出的签名是唯一的,可以用来验证。参数的可变性:参数中包含时间戳参...

weixin_34697798的博客 680
上一篇: AngularJS跨域和session失效问题
下一篇: MySQL的日常使用
leebin_20
博客等级 码龄12年 17粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值