1

我在 mule 中使用 cxf 创建了一个代理服务。我的 mule 版本是 3.3.0 CE。现在,我想对使用代理服务创建的 wsdl 进行限制。我的限制不应该允许他们看到我的 wsdl 的每个 IP。为此,我找到了 Groovy 表达式和下面的代码:

<expression-filter
        expression="#[groovy:'${allowed}'.contains(message.getInboundProperty('MULE_REMOTE_CLIENT_ADDRESS').substring(message.getInboundProperty('MULE_REMOTE_CLIENT_ADDRESS').indexOf('/')+1, message.getInboundProperty('MULE_REMOTE_CLIENT_ADDRESS').indexOf(':')))]"
        doc:name="Expression" />

我不知道是好代码还是没有?而且我不知道应该在哪里定义我的有效IP?

4

3 回答 3

3

这种方法是有效的。唯一建议我要做的是将 IP 解析提取到全局函数中,以实现可重用性和更好的可读性:

<configuration>
    <expression-language>
        <global-functions>
            def parseIp(fullIp) {
                return fullIp.substring(fullIp.indexOf('/') + 1, fullIp.indexOf(':'))
            }
        </global-functions>
    </expression-language>
</configuration>    

然后你可以按如下方式使用它:

<expression-filter expression="#['${allowed}'.contains(parseIp(message.inboundProperties['MULE_REMOTE_CLIENT_ADDRESS']))]"
        doc:name="Expression" />
于 2013-01-30T13:28:12.650 回答
0

基于 IP 地址限制服务看起来不是一种可扩展的方法。

如果您有更多客户进入,甚至可能有 1 个客户,请求可以从不同的环境(产品、测试、开发)发送,那么您将拥有不同的 IP。

客户也可以改变他们的机器,IP 不会保持不变。您不想设计一个系统,其中客户端的更改会影响您,并且您的解决方案应该具有足够的可扩展性以适应更多客户端。

一种解决方案是寻找Securing your web service. 这篇博客文章谈到了它。http://blogs.mulesoft.org/securing-soap-web-services-using-ws-security/

使用 Mule 搜索 Web 服务安全性将为您提供更多结果。

于 2013-01-30T14:18:47.807 回答
0

对于 Mule EE 用户,MuleSoft 现在提供了一个包含IP 过滤器的企业安全模块。

于 2013-01-30T15:25:08.873 回答