骡子安全过滤器打破流量

时间:2013-11-14 20:22:44

标签: security serialization collections mule split

我的知识差距完全不知所措。

骡子3.3.1 CE。我现在必须使用该版本。

我有一个正常的流程,直到我尝试使用具有有效凭据的安全过滤器。

Mule代码如下。它不会有太大的商业意义,因为我已经把它减少到产生问题的最小值。通常,出站呼叫是在一个单独的流程中,但我将其拉入主流程中。

如果我对入站端点上的安全过滤器进行了注释并执行此操作,则会得到记录器消息和“foo”返回有效负载的预期响应。

<https:connector name="HTTPSConnector"  validateConnections="true" sendBufferSize="0" receiveBufferSize="0" receiveBacklog="0" clientSoTimeout="10000" serverSoTimeout="10000" socketSoLinger="0" doc:name="HTTP\HTTPS">
    <https:tls-key-store path="/opt/eai/common/keystore/EAIKeystore.jks" keyPassword="${key.password}" storePassword="${store.password}"/>
</https:connector>

<spring:beans>
    <ss:authentication-manager alias="authManager">
        <ss:authentication-provider>
            <ss:user-service id="userService">
                <ss:user name="PortalUser" password="password" authorities="ROLE_USER"/>
            </ss:user-service>
        </ss:authentication-provider>
    </ss:authentication-manager>
</spring:beans>

<mule-ss:security-manager>
    <mule-ss:delegate-security-provider name="memory-provider" delegate-ref="authManager"/>
</mule-ss:security-manager>

<flow name="Main" doc:name="Main">
    <https:inbound-endpoint exchange-pattern="request-response" host="localhost" port="10029" path="sites/r.v1" mimeType="text/xml" encoding="UTF-8" connector-ref="HTTPSConnector">
        <mule-ss:http-security-filter realm="mule-realm"/>
    </https:inbound-endpoint>

    <custom-transformer class="com.ca.eai.esb.transformer.site.StrategySplittingTransformer" doc:name="Split"/>
    <collection-splitter/>

    <https:outbound-endpoint exchange-pattern="request-response" 
            address="${https.outbound.account.sap-nameaddress}" 
            connector-ref="HTTPSConnector"
            mimeType="text/xml" responseTimeout="${https.outbound.timeout}"/>

    <logger level="INFO" message="GOT HERE"/>

    <set-payload value="foo"/>
</flow>

自定义变压器也减少到最低限度:

@Override
public Object transformMessage( MuleMessage message, String outputEncoding )
{
    MuleMessageCollection collection = new DefaultMessageCollection( message.getMuleContext() );

    collection.addMessage( message );

    return collection;
}

如果我取消注释安全过滤器并传入错误的凭据,我会得到预期的安全性异常。

但是,如果我传入有效凭据,则会收到无法序列化的异常。

Root Exception stack trace:
java.io.NotSerializableException: org.apache.commons.httpclient.ContentLengthInputStream
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1180)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:346)
    at java.util.concurrent.CopyOnWriteArrayList.writeObject(CopyOnWriteArrayList.java:857)
    + 3 more (set debug level logging or '-Dmule.verbose.exceptions=true' for everything)

有人可以告诉我为什么添加安全过滤器会导致这种情况吗?

1 个答案:

答案 0 :(得分:1)

这是一个已在3.4.x中修复的错误。

请参阅此回答https://stackoverflow.com/a/17930063/387927及其下方的评论。