需求说明:
现有三个变量:appId、appSecret、timestamp(当前时间时间戳),根据这三个变量生成signature,加密程序如下:
1 package cn.yxh.util; 2 3 import org.apache.commons.codec.binary.Base64; 4 5 import javax.crypto.Mac; 6 import javax.crypto.spec.SecretKeySpec; 7 import java.net.URLEncoder; 8 import java.nio.charset.StandardCharsets; 9 import java.util.HashMap; 10 import java.util.Map; 11 import java.util.stream.Collectors; 12 13 public class SignatureUtil { 14 public static String getSignature(long timestamp, String appId, String appSecret) throws Exception { 15 Map<String,String> requestParams = new HashMap<>(); 16 requestParams.put("appId", appId); 17 requestParams.put("timestamp", String.valueOf(timestamp)); 18 requestParams.put("nonce", "nonce"); 19 requestParams.put("appSecret", appSecret); 20 String stringToSign = requestParams.values().stream() 21 .sorted(String::compareTo) 22 .collect(Collectors.joining(" ")); 23 Mac mac = Mac.getInstance("HmacSHA256"); 24 mac.init(new SecretKeySpec(appSecret.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); 25 byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); 26 String base64Sign = new String(Base64.encodeBase64(signData),StandardCharsets.UTF_8); 27 String sign = URLEncoder.encode(base64Sign, StandardCharsets.UTF_8.name()); 28 return sign; 29 } 30 31 public static long getTimeStamp(){ 32 return System.currentTimeMillis(); 33 } 34 35 public static void main(String[] args) throws Exception { 36 String appId = "12526080-1245184"; 37 String appSecret = "9A6E5171C9A034863622"; 38 System.out.println(getSignature(getTimeStamp(), appId, appSecret)); 39 } 40 }
由于使用到了commons-codec-1.14.jar,需要使用jmeter引用外部jar包,但是在使用过程中发现老是报错,且jmeter无法直接使用Map<String,String> requestParams = new HashMap<>();需要转换成Map requestParams = new HashMap;等各种错误,故想自己将java文件打包成jar调用。
1.编写自己的java文件并利用idea打包成jar文件
- 新建一个java工程,编写java文件并引入commons-codec-1.14.jar包
- 按组合键ctrl+shift+alt+s进入项目结构界面,点击第二张图片上的『+』按钮,选择第二个选项
- 为jar包添加一个主函数,点击OK继续
-
如果主函数有依赖包,点击『+』按钮添加依赖jar包(如已添加则不需操作),点击OK后可以看到工程中多出了META-INFO文件,里面包含了Jar的入口函数信息
-
执行组建jar操作:按照下图操作后可以看到最终生成的jar文件
-
打开命令行cmd,将目录切换到生成jar包的文件位置,执行如下命令:
java -jar SignatureUtil.jar
输出:z9kUv8RsE0OPgHmHh8VJqpgGxhn9eVRJkEu7IsP%2Bhag%3D,可见jar文件正常运行了
2.jmeter引用自己编写的jar包
将SignatureUtil.jar包放到jmeter安装目录下的lib下的ext文件下(例如:D:apache-jmeter-5.1.1libextSignatureUtil.jar)
jmeter添加jar包
beanshell脚本调用jar包中的方法