如何在WSO2 API Manager 3.2的Script Mediator中记录请求头
解决方案:用Script Mediator或Log Mediator记录所有传输请求头
为什么你之前的代码返回null?
mc.getProperty("org.apache.axis2.context.MessageContext.TRANSPORT_HEADERS")直接从Synapse消息上下文(mc)获取属性,但TRANSPORT_HEADERS实际存储在Axis2底层消息上下文中,而非Synapse上下文,所以直接调用会返回null。
方案1:用JavaScript Script Mediator获取并记录
将以下脚本放在对应序列的正确位置(入站头放inSequence开头,出站头放Send中介前):
// 获取Axis2底层消息上下文 var axis2Ctx = mc.getAxis2MessageContext(); // 获取传输头(入站用TRANSPORT_HEADERS,出站用OUT_TRANSPORT_HEADERS) var headers = axis2Ctx.getProperty("TRANSPORT_HEADERS"); if (headers) { var logContent = "=== 所有传输请求头 ===\n"; var keys = headers.keySet().iterator(); while (keys.hasNext()) { var key = keys.next(); logContent += `${key}: ${headers.get(key)}\n`; } // 输出到WSO2日志 log.info(logContent); } else { log.warn("未获取到传输请求头,请检查序列位置是否正确"); }
- 若要记录API发往后端的出站请求头,将
TRANSPORT_HEADERS替换为OUT_TRANSPORT_HEADERS即可。
方案2:用Log Mediator快速记录(更简洁)
无需写脚本,直接用Synapse内置的Log Mediator,支持一键输出所有传输头:
记录入站请求头(客户端→API)
<inSequence> <!-- 直接输出所有传输头 --> <log level="headers"/> <!-- 后续业务逻辑 --> <send> <endpoint>你的后端端点配置</endpoint> </send> </inSequence>
自定义格式记录
如果需要更清晰的日志格式,用custom级别指定属性:
<log level="custom"> <property name="入站传输请求头" expression="get-property('axis2', 'TRANSPORT_HEADERS')"/> </log>
- 同样,记录出站头时将
TRANSPORT_HEADERS替换为OUT_TRANSPORT_HEADERS,并放在Send中介之前。
内容的提问来源于stack exchange,提问作者Jefledge
相关产品推荐
相关产品推荐

