资源简介
接口签名得工具类,可直接使用, 主要设计参考微信接口方案。

代码片段和文件信息
package com.lz.platform.core.utils;
import com.lz.platform.core.exception.ApplicationException;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletRequest;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;
/**
* Created with IDEA
* author:鲍承东
* Date:2018/11/27
* Time:11:52
* 签名验证工具
**/
public class SignUtils {
private final static Logger logger = LoggerFactory.getLogger(SignUtils.class);
/**
* 方法描述:将字符串MD5加码 生成32位md5码
*
* @param inStr
* @return
*/
public static String md5(String inStr) {
try {
return DigestUtils.md5Hex(inStr.getBytes(“UTF-8“)).toUpperCase();
} catch (UnsupportedEncodingException e) {
throw new RuntimeException(“MD5签名过程中出现错误“);
}
}
/**
* 方法描述:签名字符串
*
* @param params 需要签名的参数
* @param appSecret 签名密钥
* @return
*/
public static String sign(HashMap params String appSecret) {
StringBuilder valueSb = new StringBuilder();
// 将参数以参数名的字典升序排序
Map sortParams = new TreeMap(params);
for (Map.Entry entry : sortParams.entrySet()) {
String key = entry.getKey();
String value = entry.getValue().trim();
if (StringUtils.isNotEmpty(value))
valueSb.append(“&“).append(key).append(“=“).append(value);
}
String stringA = valueSb.toString().replaceFirst(“&“““);
String stringSignTemp = stringA + “&“+“secret=“+appSecret;
return md5(stringSignTemp);
}
/**
* 方法描述:验证签名
*
* @param appSecret 加密秘钥
* @param request
* @return
* @throws Exception
*/
public static boolean verify(String appSecret HttpServletRequest request) throws Exception {
String sign = request.getParameter(“sign“);
if (sign == null) {
throw new ApplicationException(“请求中没有带签名[sign]!“);
}
if (request.getParameter(“timestamp“) == null) {
throw new ApplicationException(“请求中没有带时间戳[timestamp]!“);
}
HashMap params = new HashMap();
// 获取url参数
@SuppressWarnings(“unchecked“)
Enumeration enu = request.getParameterNames();
while (enu.hasMoreElements()) {
String paramName = enu.nextElement().trim();
if (!paramName.equals(“sign“)) {
// 拼接参数值字符串并进行utf-8解码,防止中文乱码产生
params.put(paramName URLDecoder.decode(request.getParameter(paramName) “UTF-8“));
}
}
String mysign = sign(para
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3888 2018-11-27 15:28 签名\SignUtils.java
文件 1349 2018-11-29 12:50 签名\接口签名说明.txt
目录 0 2018-11-29 12:46 签名
----------- --------- ---------- ----- ----
5237 3
相关资源
- MCS_51单片机与8255A的接口设计
- 8259A中断控制实验
- I2C总线接口设计
- 应用接口支持库1.1版eAPI
- 手机短信api接口(源代码)
- ATA(ATAPI)接口指令协议硬盘基础知识
- 基于FPGA的USB接口设计
- 枚举USB设备接口(C 源代码)
- II型逆向跷跷板机制及其在LHC和ILC的签
- 8051单片机教程第二十六课:矩阵式键
- 矿用多功能网关通信接口设计
- 液晶显示器VGA视频接口及显示规范
- 税控发票开票软件发票信息数据接口
- PLC通讯与接口
- 用Verilog语言写的CPLD和MCU通讯的SPI接口
- 浪潮FC光纤接口系统SAN存储解决方案
- Surface pro 7 SD卡固定硬盘X64驱动带数字
- 佐藤打印机SATO打印接口控件
- 基于LPC2134与T6963C液晶显示模块的接口
- LPC2134与T6963C液晶显示模块的接口设计
- 基于ARM微处理器的液晶触摸屏接口设
- 解读ARM7内核微控制器以太网接口电路
- SAC型液压支架控制器检测平台的设计
- LSI展示端到端SAS解决方案和存储接口
- 一步一步初学Lis接口一
- 帝国CMS微信支付宝支付接口插件
- AzkabanAPI接口文档汇总
- SignApkV2 签名工具
- TD-SCDMA测试仪中Iub接口CDR的合成方案
- IBM DS5100/DS5300主机接口卡的配置方法
评论
共有 条评论