application/x-www-form-urlencoded 所有参数排序以及参数自动添加sign签名工具类

本文主要是介绍application/x-www-form-urlencoded 所有参数排序以及参数自动添加sign签名工具类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

import java.math.BigInteger;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;/*** @program: outsys-adapter* @description: 所有参数排序以及参数自动添加sign签名* @author: ShiHuaHao* @create: 2019-06-28 09:40**/
public class ParamUtil {/*** 所有参数排序以及参数自动添加sign签名* @param param* @return*/public static String getParam4Url(String param) throws NoSuchAlgorithmException {// 将参数按字母排序String[] parameters = param.split("&");TreeMap SortedParametersWithoutSign = new TreeMap();for (int i = 0; i < parameters.length; i++) {String[] pandvalue = parameters[i].split("=");if (pandvalue.length > 1) {String[] values = Arrays.copyOfRange(pandvalue, 1, pandvalue.length);if (!values[0].equals(""))SortedParametersWithoutSign.put(pandvalue[0], values[0]);}}String requestParameters = "";Set set = SortedParametersWithoutSign.entrySet();Iterator iterator = set.iterator();int iterationcount = 0;while(iterator.hasNext()) {Map.Entry mentry = (Map.Entry)iterator.next();if(iterationcount == 0)requestParameters += mentry.getKey()+"="+mentry.getValue();else requestParameters += "&"+mentry.getKey()+"="+mentry.getValue();iterationcount++;}// 将组装的参数 得到md5 散列串MessageDigest md = MessageDigest.getInstance("MD5");byte[] messageDigest = md.digest(requestParameters.getBytes(Charset.forName("UTF-8")));BigInteger number = new BigInteger(1, messageDigest);String hashtext = number.toString(16);// Now we need to zero pad it if you actually want the full 32 chars.while (hashtext.length() < 32) {hashtext = "0" + hashtext;}// 加入sign的参数,重新生成 请求的参数。SortedParametersWithoutSign.put("sign",hashtext);// 重新拿到最新的请求数据requestParameters = "";set = SortedParametersWithoutSign.entrySet();iterator = set.iterator();iterationcount = 0;while(iterator.hasNext()) {Map.Entry mentry = (Map.Entry)iterator.next();if(iterationcount == 0)requestParameters += mentry.getKey()+"="+mentry.getValue();else requestParameters += "&"+mentry.getKey()+"="+mentry.getValue();iterationcount++;}return requestParameters;}}

主要参考:链接

这篇关于application/x-www-form-urlencoded 所有参数排序以及参数自动添加sign签名工具类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/451641

相关文章

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

JAVA实现Token自动续期机制的示例代码

《JAVA实现Token自动续期机制的示例代码》本文主要介绍了JAVA实现Token自动续期机制的示例代码,通过动态调整会话生命周期平衡安全性与用户体验,解决固定有效期Token带来的风险与不便,感兴... 目录1. 固定有效期Token的内在局限性2. 自动续期机制:兼顾安全与体验的解决方案3. 总结PS

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

linux部署NFS和autofs自动挂载实现过程

《linux部署NFS和autofs自动挂载实现过程》文章介绍了NFS(网络文件系统)和Autofs的原理与配置,NFS通过RPC实现跨系统文件共享,需配置/etc/exports和nfs.conf,... 目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NF

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

MyBatis Plus实现时间字段自动填充的完整方案

《MyBatisPlus实现时间字段自动填充的完整方案》在日常开发中,我们经常需要记录数据的创建时间和更新时间,传统的做法是在每次插入或更新操作时手动设置这些时间字段,这种方式不仅繁琐,还容易遗漏,... 目录前言解决目标技术栈实现步骤1. 实体类注解配置2. 创建元数据处理器3. 服务层代码优化填充机制详

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

HTTP 与 SpringBoot 参数提交与接收协议方式

《HTTP与SpringBoot参数提交与接收协议方式》HTTP参数提交方式包括URL查询、表单、JSON/XML、路径变量、头部、Cookie、GraphQL、WebSocket和SSE,依据... 目录HTTP 协议支持多种参数提交方式,主要取决于请求方法(Method)和内容类型(Content-Ty