我目前正在评估不同的ESB产品(事实上我现在正专注于mule)。用例是代理一个简单的HTTP服务,一个OpenGIS Web制图服务WMS。
以下是免费发布的WMS服务的示例:
两者都将其数据作为字节数组返回,这可能是我正在处理的问题。
我可以通过Mule ESB代理它之后,我想添加如下安全功能:
但基本上代理本身并不像我想要的那样工作。这是我到目前为止所得到的。首先,我尝试使用流代理它以在入站地址添加安全提供程序。但请求似乎没有通过出站地址,响应是空的。
<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:http="http://www.mulesoft.org/schema/mule/http" xmlns:doc="http://www.mulesoft.org/schema/mule/documentation" xmlns:spring="http://www.springframework.org/schema/beans" xmlns:mulexml="http://www.mulesoft.org/schema/mule/xml" xmlns:pattern="http://www.mulesoft.org/schema/mule/pattern" xmlns:core="http://www.mulesoft.org/schema/mule/core" xmlns:file="http://www.mulesoft.org/schema/mule/file" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mule-ss="http://www.mulesoft.org/schema/mule/spring-security" xmlns:ss="http://www.springframework.org/schema/security" version="CE-3.2.1" xsi:schemaLocation="...cut..."
<mule-ss:security-manager>
<mule-ss:delegate-security-provider name="memory-provider" delegate-ref="authenticationManager"/>
</mule-ss:security-manager>
<spring:beans>
<ss:authentication-manager alias="authenticationManager">
<ss:authentication-provider>
<ss:user-service id="userService">
<ss:user name="ross" password="ross" authorities="ROLE_ADMIN"/>
<ss:user name="anon" password="anon" authorities="ROLE_ANON"/>
</ss:user-service>
</ss:authentication-provider>
</ss:authentication-manager>
</spring:beans>
<http:connector name="NoSessionConnector">
<service-overrides sessionHandler="org.mule.session.NullSessionHandler" />
</http:connector>
<flow name="wfsFlow1" doc:name="wfsFlow1" processingStrategy="synchronous">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8081" path="wms" responseTimeout="10000000" doc:name="Geoserver OWS">
<mule-ss:http-security-filter realm="mule-realm"/>
</http:inbound-endpoint>
<http:outbound-endpoint exchange-pattern="request-response" method="GET" address="http://www.wms.nrw.de/wms#[header:INBOUND:http.request]" encoding="UTF-8" disableTransportTransformer="true" responseTimeout="1000000" doc:name="Geoserver OWS"/>
</flow>
</mule>
我认为问题是WMS服务作为字节数组的响应。我尝试了不同的repsonse变换器从字节数组转换为字符串或html响应,但它没有用。
我也尝试过桥接模式,但它没有像我预期的那样提供GET操作的参数,而是通过POST提供,而底层的WMS服务不接受。
我认为我的用例非常简单,但是我试图在四周后实现它。我做了这些供应商提供的每个示例教程,但我无法使用任何类型的身份验证设置简单的HTTP参数服务。
有没有人对这些产品有任何经验,或者很高兴回答一些关于如何在任何这些产品上设置身份验证的HTTP代理的具体问题。
非常感谢!
答案 0 :(得分:2)
WSO2 ESB支持各种传输和内容类型,而不仅仅是SOAP。您可能对REST以及可能的JSON支持最感兴趣。 here和here的链接可能有所帮助。
所有WSO2服务器都可以插入外部目录服务。 Click here for instructions
可以涵盖您的所有要求。您可以在this location查看综合样本,以了解ESB可以执行的操作。我还要指出here,here,here,here和here中可以帮助您满足要求的文章。
希望这有帮助。
答案 1 :(得分:0)
在对人员进行身份验证和授权时,Mule依赖于Spring Security。
Configuring Security是处理Mule安全性的文档入口点。您将找到有关配置Spring Security,保护组件(如HTTP桥)和LDAP身份验证的信息。
默认情况下,Mule在执行出站请求时将其会话序列化为HTTP标头。如果远程站点不受信任,这不仅可能是安全问题,而且还可能导致错误请求问题,因为序列化会话会产生过大的HTTP标头。
知道当存在安全上下文时,Mule会话变得相当大,这可能会导致问题。事实上,使用您的配置,我从远程测试站点收到了错误的请求错误!所以我添加了以下内容以确保Mule不通过HTTP发送请求:
<http:connector name="NoSessionConnector">
<service-overrides sessionHandler="org.mule.session.NullSessionHandler" />
</http:connector>
我还从配置中删除了disableTransportTransformer="true"
,因为这也会导致问题。