Jmeter提取SAML响应时等号自动转义为%3D的问题如何解决
JMeter SAML响应转义问题修复方案
核心原因排查
你之前使用Beanshell预处理器处理失败的核心原因:正则表达式提取器是在取样器执行结束后才会从响应中提取内容,预处理器运行时机在取样器执行前,此时尚未生成提取到的SAML变量,自然无法完成替换。
另外即使你关闭了提取器的URL Encode选项,如果后续请求的参数勾选了编码选项,JMeter也会自动对参数值做URL转义,把=转为%3D。
修复步骤
- 第一步:确认正则表达式提取器配置
确保提取器的URL解码选项未误开启,正则匹配规则、模板、匹配数字配置正确,比如提取form表单中的SAML响应可使用规则:name="SAMLResponse" value="(.+?)",模板填$1$,匹配数字填1,假设提取到的变量名为saml_response。 - 第二步:替换为JSR223后置处理器做转义还原
不要使用已被JMeter官方废弃的Beanshell组件,换成JSR223后置处理器,放在正则表达式提取器的同级位置,语言选择groovy,勾选Cache compiled script if available提升性能,填入以下代码:// 读取正则提取到的SAML内容 def originSaml = vars.get("saml_response") // 还原被转义的=符号 def processedSaml = originSaml.replace("%3D", "=") // 可按需新增其他替换规则,比如需要还原+就加.replace("%2B", "+") vars.put("processed_saml", processedSaml) - 第三步:确认后续请求参数配置
如果你把SAML内容放到HTTP请求的参数列表中,要取消对应参数行的编码勾选,避免JMeter自动再次转义。如果是放到请求体中,直接引用${processed_saml}即可。
内容的提问来源于stack exchange,提问作者Rathika
相关产品推荐
相关产品推荐

