я на 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).
Кто-то предложил мне использовать условный маршрутизатор, чтобы получить поведение блокировки, подобное тому, которое я хочу.
Вместо этого, если я заменю 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>
Итак, вопрос:
Я неправильно использую условный маршрутизатор?
Это баг условного роутера?