我使用esb作为调解员,基本上将休息转换为肥皂。我调用的soap是安全的,所以我需要一个Authorization属性。我使用这项服务没问题:
<resource methods="GET" uri-template="/getAllZones">
<inSequence>
<property xmlns:ns="http://org.apache.synapse/xsd" name="Authorization" expression="fn:concat('Basic ', base64Encode('user:password'))" scope="transport"></property>
<property name="DISABLE_CHUNKING" value="true" scope="axis2"></property>
<payloadFactory media-type="xml">
<format>
<zon:GetAllZones xmlns:zon="http://someUrl.xsd">
<Filter></Filter>
</zon:GetAllZones>
</format>
<args></args>
</payloadFactory>
<send>
<endpoint key="myEndpoint"></endpoint>
</send>
<log level="full"></log>
</inSequence>
<outSequence>
<property name="messageType" value="application/json" scope="axis2" type="STRING"></property>
<send></send>
</outSequence>
</resource>
但我想将用户和密码存储为ESB中的本地条目。我试过这个:
<property xmlns:ns="http://org.apache.synapse/xsd" name="Authorization" expression="fn:concat('Basic ', base64Encode(get-property('user'):get-property('password')))" scope="transport"></property>
但它不起作用。有任何想法吗? 提前致谢
答案 0 :(得分:2)
您可以将值存储在注册表中。然后使用带范围注册表的get-property访问它们。
例如,如果您在conf:/creds/user
中存储了一些注册表资源,并且具有用户名和密码属性,则可以使用以下命令访问这些资源:
get-property('registry', 'conf:/creds/user@username')
和get-property('registry', 'conf:/creds/user@password')
你会使用类似的东西:
<inSequence>
<log level="custom">
<property name="Username" expression="get-property('registry', 'conf:/user@username')"/>
<property name="Password" expression="get-property('registry', 'conf:/user@password')"/>
<property name="Encoded" expression="fn:concat('Basic ', base64Encode(fn:concat(get-property('registry', 'conf:/user@username'), ':', get-property('registry', 'conf:/user@username'))))"/>
</log>
<respond/>
</inSequence>
但您可能需要考虑加密密码。在这种情况下,您应该使用ESB中的安全保管库。您可以使用别名{wso2:vault-lookup('user')}
访问安全保管库中的某些内容。
https://docs.wso2.com/display/ESB490/Working+with+Passwords中的更多详情。