Jmeter-JSR233 PreProcessor-调用jar包-实现JWT鉴权  AES加密-将输出字段返回至请求body
前言也可以写python代码实现jwt鉴权和字段加密但是在jmeter中处理会比较麻烦所以选择用java实现相关参考链接AES 加密/解密 - 锤子在线工具JAVA实现RSA加密并在Jmeter/测试平台中调用 - 南北阡陌Jmeter接口测试AES加密-不引用外部jar包徒手实现AES加密_jmeter的aes-cbc模式本地加解密-CSDN博客1. JWT-java代码ai编写版本将以下代码编译后打一个jar包放置在Jmeter/ Lib/ext目录下通用版本ai生成版import java.nio.charset.StandardCharsets; import java.security.*; import java.security.spec.*; import java.util.*; import java.util.Base64; public class JwtCode { /** * 生成通用 JWT Authorization * * param kid 可选的 Key ID用于标识签名密钥 * param privateKeyPem RSA 私钥支持 PKCS#1 / PKCS#8 * return Authorization Header 的值 */ public static String generateAuthorization( String kid, String privateKeyPem ) throws Exception { // // 1. Header // MapString, Object header new LinkedHashMap(); if (kid ! null !kid.isEmpty()) { header.put(kid, kid); } header.put(alg, RS256); header.put(typ, JWT); // // 2. Payload // long now System.currentTimeMillis() / 1000L; MapString, Object payload new LinkedHashMap(); payload.put(iat, now); payload.put(exp, now 5 * 60); // // 3. Base64URL 编码 // String encodedHeader base64UrlEncode( toJson(header).getBytes(StandardCharsets.UTF_8) ); String encodedPayload base64UrlEncode( toJson(payload).getBytes(StandardCharsets.UTF_8) ); // JWT Signing Input String signingInput encodedHeader . encodedPayload; // // 4. 加载 RSA 私钥 // PrivateKey privateKey loadPrivateKey(privateKeyPem); // // 5. RS256 签名 // byte[] signature sign( privateKey, signingInput.getBytes(StandardCharsets.UTF_8) ); String encodedSignature base64UrlEncode(signature); // // 6. 生成 JWT // String jwt signingInput . encodedSignature; return Bearer jwt; } /** * RS256 SHA256withRSA */ private static byte[] sign( PrivateKey privateKey, byte[] data ) throws Exception { Signature signature Signature.getInstance(SHA256withRSA); signature.initSign(privateKey); signature.update(data); return signature.sign(); } /** * Base64URL 编码 */ private static String base64UrlEncode(byte[] bytes) { return Base64 .getUrlEncoder() .withoutPadding() .encodeToString(bytes); } /** * 加载 RSA 私钥 * * 支持 * PKCS#8 * -----BEGIN PRIVATE KEY----- * * PKCS#1 * -----BEGIN RSA PRIVATE KEY----- */ private static PrivateKey loadPrivateKey( String pem ) throws Exception { String cleanPem pem .replace(-----BEGIN PRIVATE KEY-----, ) .replace(-----END PRIVATE KEY-----, ) .replace(-----BEGIN RSA PRIVATE KEY-----, ) .replace(-----END RSA PRIVATE KEY-----, ) .replaceAll(\\s, ); byte[] keyBytes Base64.getDecoder().decode(cleanPem); // 尝试 PKCS#8 try { KeyFactory keyFactory KeyFactory.getInstance(RSA); return keyFactory.generatePrivate( new PKCS8EncodedKeySpec(keyBytes) ); } catch (Exception e) { // 尝试 PKCS#1 return readPkcs1PrivateKey(keyBytes); } } /** * PKCS#1 RSA 私钥转换为 PKCS#8 */ private static PrivateKey readPkcs1PrivateKey( byte[] pkcs1Bytes ) throws Exception { final byte[] pkcs8Header new byte[]{ 0x30, (byte) 0x82, (byte) ((pkcs1Bytes.length 22) 8), (byte) ((pkcs1Bytes.length 22) 0xff), 0x02, 0x01, 0x00, 0x30, 0x0d, 0x06, 0x09, 0x2a, (byte) 0x86, 0x48, (byte) 0x86, (byte) 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00, 0x04, (byte) 0x82, (byte) (pkcs1Bytes.length 8), (byte) (pkcs1Bytes.length 0xff) }; byte[] pkcs8Bytes new byte[ pkcs1Bytes.length pkcs8Header.length ]; System.arraycopy( pkcs8Header, 0, pkcs8Bytes, 0, pkcs8Header.length ); System.arraycopy( pkcs1Bytes, 0, pkcs8Bytes, pkcs8Header.length, pkcs1Bytes.length ); KeyFactory keyFactory KeyFactory.getInstance(RSA); return keyFactory.generatePrivate( new PKCS8EncodedKeySpec(pkcs8Bytes) ); } /** * 简单 JSON 序列化 * * 本示例仅用于演示 JWT。 */ private static String toJson( MapString, Object map ) { StringBuilder sb new StringBuilder({); IteratorMap.EntryString, Object iterator map.entrySet().iterator(); while (iterator.hasNext()) { Map.EntryString, Object entry iterator.next(); sb.append(\) .append(entry.getKey()) .append(\:); Object value entry.getValue(); if (value instanceof Number) { sb.append(value); } else { sb.append(\) .append(value) .append(\); } if (iterator.hasNext()) { sb.append(,); } } sb.append(}); return sb.toString(); } }2. AES请求字段加密同理让AI帮忙生成代码编译成jar包即可3. jar包——4.JSR223 PreProcessor用法将以下代码放置到Jmeter -JSR223 PreProcessor中即可加密请求字段后获取对应的请求字段:import org.example.*; //导入实现加密的jar包复制到jmeter前置处理器把注释删掉否则会报错 import java.time.Instant; import java.util.Map; //String 代码需要的参数名 vars.get(jmeter设置的需要加密/处理的参数); String originalData vars.get(data); String timeStamp vars.get(timestamp); String pemPubKey vars.get(public_key); Map rets AESUtils.encData(originalData, timeStamp, pemPubKey);//使用自定义的里面的函数获取返回值 //vars.put(最后在jmeter使用的参数名),rets.get(代码输出到对应的参数名))) vars.put(data,rets.get(data)); vars.put(timestamp,rets.get(timestamp)); vars.put(enc_key,rets.get(enc_key)); vars.put(pub_key_hash,rets.get(pub_key_hash)); vars.put(final_nonce,rets.get(nonce));获取当前Request bodyimport org.apache.jmeter.config.Arguments; import java.util.Map; Arguments args sampler.getArguments(); Map reqMap args.getArgumentsAsMap(); StringBuilder bodyBuilder new StringBuilder(); for (String key : reqMap.keySet()) { Object value reqMap.get(key); log.info(String.valueOf(value)); if (key ! null key.length() 0) { bodyBuilder.append(key).append().append(value); } else { bodyBuilder.append(value); } } String requestBody bodyBuilder.toString(); vars.put(request_body, requestBody);获取到的当前请求body 调用jar包Jwt加密后的到Authorizationimport org.example.JwtCode; String privateKeyPem vars.get(privateKeyPem); // JWT需要的参数根据实际情况填入参数 String auth JwtCode.generateAuthorization( null, privateKeyPem ); vars.put(Authorization, auth); //JWT加密后的到的鉴权参数经由vars.put获取到的参数可以直接被调用放到请求头/请求body里面例如

相关新闻

04-02-哈希-Dictionary-TKey-TValue-上-核心数据结构

04-02-哈希-Dictionary-TKey-TValue-上-核心数据结构

Dictionary<TKey,TValue>&#xff08;上&#xff09;&#xff1a;核心数据结构 系列&#xff1a;C#与常用数据结构源码剖析 数据结构-哈希与映射篇 阅读时间&#xff1a;约 55 分钟 源码位置&#xff1a;dotnet/runtime5535e31.../Dictionary.cs 版本边界&#xff1a;以…

2026/8/26 18:49:26 阅读更多 →
04-03-哈希-Dictionary-TKey-TValue-下-关键操作逐行分析

04-03-哈希-Dictionary-TKey-TValue-下-关键操作逐行分析

Dictionary<TKey,TValue>&#xff08;下&#xff09;&#xff1a;关键操作逐行分析 系列&#xff1a;C# 与常用数据结构源码剖析 数据结构—哈希与映射篇 源码入口&#xff1a;dotnet/runtime/src/libraries/System.Private.CoreLib/src/System/Collections/Generic/Dic…

2026/8/26 18:49:26 阅读更多 →
悬疑反转短剧制作教程:用知漫剧打造高完播率的惊悚悬疑漫剧

悬疑反转短剧制作教程:用知漫剧打造高完播率的惊悚悬疑漫剧

惊悚悬疑漫剧常面临氛围难烘托与人物变脸等痛点。作为AI模型聚合平台&#xff0c;工具整合站点知漫剧( tt.jiaxunai.cn) 针对小白提供超低价一键式生成与专业指导&#xff0c;教你快速打造高完播率短剧。 行业常见痛点&#xff1a;悬疑反转漫剧制作中的“氛围拉胯”与“角色跑戏…

2026/8/26 18:48:26 阅读更多 →

最新新闻

Ornith-1.5 自我改进范式深度剖析:任务生成、脚手架与 Rollout 联合强化学习如何炼出 397B 旗舰

Ornith-1.5 自我改进范式深度剖析:任务生成、脚手架与 Rollout 联合强化学习如何炼出 397B 旗舰

Ornith-1.5 自我改进范式深度剖析&#xff1a;任务生成、脚手架与 Rollout 联合强化学习如何炼出 397B 旗舰 【免费下载链接】Ornith-1.5-397B 项目地址: https://ai.gitcode.com/hf_mirrors/ornith-ai/Ornith-1.5-397B Ornith-1.5-397B 是 ornith-ai 团队推出的自我改…

2026/8/26 20:00:44 阅读更多 →
让AI写代码做数据分析:Superflows数据洞察与自动绘图功能揭秘

让AI写代码做数据分析:Superflows数据洞察与自动绘图功能揭秘

让AI写代码做数据分析&#xff1a;Superflows数据洞察与自动绘图功能揭秘 【免费下载链接】superflows Open-source toolkit to build an AI copilot for SaaS products 项目地址: https://gitcode.com/gh_mirrors/su/superflows Superflows 是一个开源的 AI 副驾驶&…

2026/8/26 20:00:44 阅读更多 →
数据库链路追踪深度实践:如何为SQL Server和Entity Framework Core启用opentelemetry-dotnet-contrib遥测

数据库链路追踪深度实践:如何为SQL Server和Entity Framework Core启用opentelemetry-dotnet-contrib遥测

数据库链路追踪深度实践&#xff1a;如何为SQL Server和Entity Framework Core启用opentelemetry-dotnet-contrib遥测 【免费下载链接】opentelemetry-dotnet-contrib This repository contains set of components extending functionality of the OpenTelemetry .NET SDK. Ins…

2026/8/26 20:00:44 阅读更多 →
item重排也要丝滑动画?三步开启SpannedGridLayoutManager的流畅过渡效果

item重排也要丝滑动画?三步开启SpannedGridLayoutManager的流畅过渡效果

item重排也要丝滑动画&#xff1f;三步开启SpannedGridLayoutManager的流畅过渡效果 【免费下载链接】SpannedGridLayoutManager Android RecyclerView.LayoutManager that resizes and reorders views based on SpanSize 项目地址: https://gitcode.com/gh_mirrors/sp/Spann…

2026/8/26 20:00:44 阅读更多 →
基于SpringBoot+Vue 2的高校失物招领系统的设计与实现

基于SpringBoot+Vue 2的高校失物招领系统的设计与实现

文章目录项目介绍技术栈功能介绍实现页面截图一、项目背景与需求分析二、系统架构与技术选型技术选型对比三、核心功能模块实现1&#xff09;失物招领列表查询2&#xff09;用户登录与注册3&#xff09;真实问题排查&#xff1a;登录态导致普通用户可见范围不稳定4&#xff09;…

2026/8/26 20:00:44 阅读更多 →
TransT开发者指南:ltr、pytracking、util三大模块目录结构与核心API完整速查

TransT开发者指南:ltr、pytracking、util三大模块目录结构与核心API完整速查

TransT开发者指南&#xff1a;ltr、pytracking、util三大模块目录结构与核心API完整速查 【免费下载链接】TransT Transformer Tracking (CVPR2021) 项目地址: https://gitcode.com/gh_mirrors/tr/TransT TransT&#xff08;Transformer Tracking&#xff0c;CVPR 2021…

2026/8/26 19:59:43 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要&#xff1a; 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数&#xff08;random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录&#xff1a; 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中&#xff0c;主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段&#xff0c;转入了政务服务的常态化落地应用&#xff1b;在实际使用过程中&#xff0c;它能自主理解办事需求、辅助完成填报申报、开展材料预审&#xff0c;并联动多个系统协同作业&#xff0c;真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态&#xff0c;宏观上观察到的光是由无数个微观的光量子组成的&#xff0c;每个光子在产生的瞬间&#xff0c;其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前&#xff0c;在微观层面&#xff0c;每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”&#xff0c;而是SIP会话的动态重定向你有没有遇到过这样的场景&#xff1a;客服坐席A正在和客户通电话&#xff0c;突然需要把这通对话无缝转给专家坐席B&#xff0c;客户完全感知不到中间的断连——既没听到忙音&#xff0c;也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack&#xff1f;如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法&#xff0c;那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →