【发布时间】:2015-01-30 10:56:06
【问题描述】:
我在 WSO2 ESB 4.8.1 上。 如果它们的路径与正则表达式匹配,我需要阻止一些请求。所以我已经实现了这个代理和这些序列:
在我的代理中:
<target>
<inSequence>
<sequence key="MySequence"></sequence>
<send>
<endpoint key="epProva"></endpoint>
</send>
</inSequence>
MySequence 在哪里:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="MySequence">
<conditionalRouter continueAfter="true">
<conditionalRoute breakRoute="true" asynchronous="true">
<condition>
<match type="url" regex=".*/my/path/.*"></match>
</condition>
<target sequence="conf:/BannedListMessage"></target>
</conditionalRoute>
</conditionalRouter>
</sequence>
BannedListMessage 在哪里:
<sequence xmlns="http://ws.apache.org/ns/synapse">
<header name="To" action="remove"></header>
<property name="HTTP_SC" value="401" scope="axis2"></property>
<property name="RESPONSE" value="true"></property>
<property name="NO_ENTITY_BODY" action="remove" scope="axis2"></property>
<payloadFactory media-type="json">
<format>
{"code":"401", "unhautorized."}
</format>
</payloadFactory>
<property name="messageType" value="application/json" scope="axis2"></property>
<respond></reposnd>
</sequence>
如果请求地址与条件路由器内的正则表达式匹配的 url,esb 唯一要做的就是发送 401 未经授权的消息,而不允许请求到达服务器。
使用此配置,我会获得错误的行为。 esb 向我发送 401 响应,但请求清楚地到达服务器(所以我认为条件路由器不会阻止请求流到达发送到 epProva 端点)。
有人建议我使用条件路由器来获得我想要的阻塞行为。
相反,如果我在下面的代码中使用 switch 中介替换 MySequence,我会得到正确的行为:
<sequence xmlns="http://ws.apache.org/ns/synapse">
<switch xmlns:m0="http://services.samples" source="get-property('requestURL')">
<case regex=".*/aggregato/C/sysadmin/mostra_contenuto/.*">
<sequence key="conf:/BannedListMessage"></sequence>
</case>
</switch>
</sequence>
所以问题是:
我是否以错误的方式使用条件路由器?
这是条件路由器的错误吗?
【问题讨论】:
标签: wso2 conditional wso2esb mediator