WSO2 API Manager 4.1.0:如何将无认证数组越界错误替换为401?
解决WSO2 API Manager 4.1.0未认证调用返回数组越界错误并返回401的方案
问题背景
在WSO2 APIM 4.1.0的Devportal中,未输入用户名密码直接调用接口时,返回错误:
<soapenv:Reason xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Text xml:lang="en-US">Index 0 out of bounds for length 0</soapenv:Text></soapenv:Reason>
需要将该错误替换为标准401未授权响应。
实现步骤
1. 创建自定义故障处理序列
登录APIM管理控制台,进入 Main > Manage > Sequences > Fault Sequences,创建名为CustomAuthFaultSequence的新故障序列,添加以下中介器配置:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="CustomAuthFaultSequence"> <property name="ERROR_CODE" value="401" scope="default" type="STRING"/> <property name="ERROR_MESSAGE" value="Unauthorized" scope="default" type="STRING"/> <property name="HTTP_SC" value="401" scope="axis2" type="STRING"/> <payloadFactory media-type="json"> <format>{"error": "$1", "message": "$2"}</format> <args> <arg evaluator="xml" expression="$ctx:ERROR_CODE"/> <arg evaluator="xml" expression="$ctx:ERROR_MESSAGE"/> </args> </payloadFactory> <respond/> </sequence>
2. 关联故障序列到目标API或全局
- API级别生效:在Publisher中打开目标API,进入 Runtime Configurations > Fault Handling,将自定义故障序列设置为该API的故障序列。
- 全局所有API生效:进入 Main > Manage > API Manager > Configurations > Global Fault Sequence,替换默认故障序列为
CustomAuthFaultSequence。
3. 精准匹配特定错误(可选)
如果仅需针对该数组越界错误返回401,可在故障序列中添加条件判断:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="CustomAuthFaultSequence"> <filter source="$ctx:ERROR_MESSAGE" regex="Index 0 out of bounds for length 0"> <then> <property name="ERROR_CODE" value="401" scope="default" type="STRING"/> <property name="ERROR_MESSAGE" value="Unauthorized" scope="default" type="STRING"/> <property name="HTTP_SC" value="401" scope="axis2" type="STRING"/> <payloadFactory media-type="json"> <format>{"error": "$1", "message": "$2"}</format> <args> <arg evaluator="xml" expression="$ctx:ERROR_CODE"/> <arg evaluator="xml" expression="$ctx:ERROR_MESSAGE"/> </args> </payloadFactory> <respond/> </then> <else> <send/> </else> </filter> </sequence>
4. 验证配置
保存配置后(部分场景需重启APIM服务),在Devportal中再次无认证调用接口,将返回标准401响应:
HTTP/1.1 401 Unauthorized Content-Type: application/json {"error": "401", "message": "Unauthorized"}
补充说明
- 若为SOAP类型API,可将
payloadFactory的media-type改为xml,构造对应SOAP错误响应。 - 配置时确保权限正确,避免干扰其他正常错误处理流程。
内容的提问来源于stack exchange,提问作者Mr White
相关产品推荐
相关产品推荐

