You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 15:22:07