WSO2 APIM 2.6中介序列无法捕获请求Authorization头的求助
我来帮你搞定这个提取Authorization头的问题——你试了好几种方法都返回null,核心原因是WSO2 APIM默认会拦截并处理Authorization头(用于OAuth2身份验证),导致它不会被传递到中介序列里。咱们一步步解决:
1. 先配置API允许Authorization头通过
首先得让APIM把这个头放行到中介序列,操作步骤如下:
- 登录APIM Publisher后台,找到你的目标API
- 进入「Runtime Configurations」(运行时配置)页面
- 在「Message Mediation」板块里找到「Headers」设置,把
Authorization添加到「Allowed Headers」列表中 - 保存配置并重新发布API
2. 正确提取Authorization头的有效方法
配置完成后,用下面任意一种方法都能成功提取:
方法一:使用get-property('transport', 'Authorization')
修改你的中介序列为:
<?xml version="1.0" encoding="UTF-8"?> <sequence name="ExtractAuthorization2EndPoint" trace="disable" xmlns="http://ws.apache.org/ns/synapse"> <!-- 提取Authorization头到自定义属性 --> <property expression="get-property('transport', 'Authorization')" name="auth_header" scope="default"/> <!-- 打印提取到的头内容 --> <log level="custom"> <property expression="get-property('auth_header')" name="captured_authorization_header"/> </log> </sequence>
方法二:使用$trp:Authorization语法
这是Synapse里直接引用传输头的简写方式,注意大小写和请求头保持一致(HTTP头本身大小写不敏感,但Synapse里建议严格匹配):
<property expression="$trp:Authorization" name="auth_header" scope="default"/>
3. 为什么之前的方法会返回null?
你之前尝试的get-property('axis2', 'TRANSPORT_HEADERS')返回null,是因为当Authorization头被APIM的安全模块拦截后,它不会被包含到TRANSPORT_HEADERS这个属性集合里,只有在你把它加入允许列表后,才能被正常读取。
额外测试建议
如果想确认所有放行的传输头,可以在序列里添加以下日志,打印全部传输头:
<log level="custom"> <property expression="get-property('transport', 'ALL_TRANSPORT_HEADERS')" name="all_transport_headers"/> </log>
内容的提问来源于stack exchange,提问作者zar3bski
相关产品推荐
相关产品推荐

