如何使用 Mule 表达式语言检查属性是否存在于值中

How to check if attribute is present in value using Mule expression language

我想根据“groupmembership”header 属性检查登录用户的授权。

的输出
<logger level="INFO" message="groups are =#[message.inboundProperties['GROUPMEMBERSHIP']]" doc:name="Logger"/> is
[groups are =cn=ZZZ-XXXX-Write-Users,ou= ZZZ-XXXX,ou=1234,ou=Groups,dc=someone,dc=net]

现在一个用户可以拥有多个组成员身份,但我只想检查用户是否是“ZZZ-XXXX-Write-Users”的成员?

MEL 中有没有办法检查它,比如 <when expression="#[message.inboundProperties.GROUPMEMBERSHIP.cn != ' ZZZ-XXXX-Write-Users ']">

这是正确的方法还是我遗漏了什么?

你描述的场景看起来更像是流量控制的东西。 在那种情况下,我会说您只在选择路由器中使用 MEL 表达式:

<choice doc:name="Choice">
  <when expression="#[!message.inboundProperties.GROUPMEMBERSHIP.cn.equals('ZZZ-XXXX-Write-Users')]">
    <!-- DO SOMETHING -->
  </when
  <otherwise>
   <!-- DO SOMETHING ELSE -->
  </otherwise>
</choice>

只是对使用 equals 比较字符串的一个小改动 ;)。

另一个选项,正如我们在这里讨论的流量控制,是一个过滤器。 如果表达式的计算结果不为真,则表达式过滤器将忽略该消息。问题是,它要么通过,要么不通过,你不能有替代路由,甚至连一条表明消息已被过滤的日志消息都没有。

    <expression-filter expression="#[!message.inboundProperties.GROUPMEMBERSHIP.cn.equals('ZZZ-XXXX-Write-Users')]" doc:name="Expression"/>

HTH