我在自定义序列(Xml)中使用了java类中介器,在该序列中处理请求负载并检查用户是否有效。
如果用户合法,则会将请求发送到后台。
但是,如果用户是无效的,则不应该将请求发送到后端,并且需要通过java类中介器或自定义序列(Xml)来设置响应代码。目前,我正在接收202已接受,我需要覆盖状态代码为401。
在java类中介器中,我使用了以下几行代码来设置属性。
org.apache.axis2.context.MessageContext msgContext = ((Axis2MessageContext) mc).getAxis2MessageContext();
msgContext.setProperty("HTTP_SC", "401");
//msgContext.setProperty("HTTP_SC", 401); (tried without quotes 401 too!!)
//mc.setProperty("HTTP_SC", 401);
((Axis2MessageContext) mc).setAxis2MessageContext(msgContext);
我使用以下代码行通过自定义序列(Xml)进行了尝试,
<property action="remove" name="HTTP_SC" scope="axis2"/>
<property name="SC_ACCEPTED" scope="axis2" value="false"/>
<property name="HTTP_SC" scope="axis2" value="401"/>
<send/>
在这两种情况下,都不返回401,只返回202。
建议一种在类中介器或自定义序列中执行此操作的方法。
发布于 2021-08-23 04:05:31
您可以尝试以下中介
<api xmlns="http://ws.apache.org/ns/synapse" name="test" context="/test">
<resource methods="GET">
<inSequence>
<property name="HTTP_SC" scope="axis2" value="409"/>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
curl -is http://localhost:8280/test
HTTP/1.1 401 Unauthorized
您可以使用以下Dockerfile对其进行测试或试用
FROM wso2/wso2am:3.2.0
COPY test.xml ${WSO2_SERVER_HOME}/repository/deployment/server/synapse-configs/default/api/test.xml
EXPOSE 8280
docker build -t test .
docker run --rm --name test -it -p 8280:8280 test
https://stackoverflow.com/questions/68891693
复制相似问题