WSO2 rampart Нет пароля, предоставленного обработчиком обратного вызова - PullRequest
0 голосов
/ 18 октября 2018

У меня проблема с прокси-сервером WSO2 (ESB v5.0.0), который защищен политикой базовой аутентификации.Я создал упрощенный контрольный пример, который показывает проблему.Служба прокси с политикой безопасности вызывает служебную службу, которая не защищена.Когда время этого вызова истекает, диагностический ответ возвращается вызывающей стороне через последовательность «onError».Когда вызов внутренней службы выполняется из итератора, исходящий ответ завершается с ошибкой:

org.apache.axis2.AxisFault: пароль, предоставленный обработчиком обратного вызова для пользователя, отсутствует: "wso2carbon "в org.apache.rampart.handler.RampartSender.invoke (RampartSender.java:76) в org.apache.axis2.engine.Phase.invokeHandler (Phase.java:340) в org.apache.axis2.engine.Phase.invoke (Phase.java:313) в org.apache.axis2.engine.AxisEngine.invoke (AxisEngine.java:261) в org.apache.axis2.engine.AxisEngine.send (AxisEngine.java:426) в орг.apache.synapse.core.axis2.Axis2Sender.sendBack (Axis2Sender.java:222) в org.apache.synapse.mediators.builtin.RespondMediator.mediate (RespondMediator.java:35) в org.apache.synapse.mediistsediator.mediate (AbstractListMediator.java:97) в org.apache.synapse.mediators.AbstractListMediator.mediate (AbstractListMediator.java:59) в org.apache.synapse.mediators.base.SequenceMediator.mediate (SequenceMediator.javag: 15).apache.synapse.mediators.MediatorFaultHandler.onFault (MediatorFaultHandler.java:93) в org.apache.synapse.FaultHandler.698) в org.apache.synapse.endpoints.AbstractEndpoint.onFault (AbstractEndpoint.java:530) в org.apache.synapse.endpoints.WSDLEndpoint.onFault (WSDLEndpoint.java:58) в org.apache.synapse.FleFaultault.(FaultHandler.java:53) в org.apache.synapse.core.axis2.TimeoutHandler.processCallbacks (TimeoutHandler.java:178) в org.apache.synapse.core.axis2.TimeoutHandler.run (TimeoutHandler.java:89) вjava.util.TimerThread.mainLoop (Неизвестный источник) в java.util.TimerThread.run (Неизвестный источник) Причина: org.apache.rampart.RampartException: Нет пароля, предоставленного обработчиком обратного вызова для пользователя: "wso2carbon" в org.apache.rampart.builder.BindingBuilder.addUsernameToken (BindingBuilder.java:207) в org.apache.rampart.builder.TransportBindingBuilder.build (TransportBindingBuilder.java:95) в org.apache.rampart.MessageBuilder.build (MessageBuilder.java:140) в org.apache.rampart.handler.RampartSender.invoke (RampartSender.java:65)

Когда итератор удален, прокси-сервер завершает работу правильно, возвращая мое сообщение об ошибке, когда бэкэнд-сервис истекает.

Если я удаляю политику безопасности, она корректно работает как с итератором, так и без него.

У кого-нибудь есть предложения, в чем может быть проблема?Я упростил прокси-сервер до минимума, чтобы продемонстрировать ошибку:

<proxy name="Tester" startOnLoad="true" transports="https http" xmlns="http://ws.apache.org/ns/synapse">
    <target>
        <inSequence>
            <enrich>
                <source clone="true" type="body"/>
                <target property="storeBody" type="property"/>
            </enrich>
            <payloadFactory media-type="xml">
                <format>
                    <Root xmlns="">
                        <Child/>
                    </Root>
                </format>
                <args/>
            </payloadFactory>
            <iterate expression="//Root/Child">
                <target>
                    <sequence>
                        <enrich>
                            <source clone="true" property="storeBody" type="property"/>
                            <target type="body"/>
                        </enrich>
                        <send>
                            <endpoint key="WSRTE_reg"/>
                        </send>
                    </sequence>
                </target>
            </iterate>
        </inSequence>
        <outSequence/>
        <faultSequence>
            <payloadFactory media-type="xml">
                <format>
                    <Error xmlns="">Error</Error>
                </format>
                <args/>
            </payloadFactory>
            <header action="remove" name="wsse:Security" scope="default" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity- 
 secext-1.0.xsd"/>
            <respond/>
        </faultSequence>
    </target>
    <policy key="gov:ihp360/AA/AA_security_policy.xml"/>
    <enableSec/>
</proxy>

Что еще хуже, если однажды произошла ошибка, ESB выдает ту же ошибку, даже если бэкэнд не истекает инеобходимо перезапустить, прежде чем он снова заработает.

Есть предложения?

...