Mule ESB:基于HTTP方法的过滤器

Mule ESB:基于HTTP方法的过滤器,mule,Mule,我想知道是否有一种基于HTTP方法过滤/路由消息的方法。我希望做的是不处理使用OPTIONS方法发布的传入请求。(这是用于跨源资源共享处理)如果您希望对选项请求执行某些操作,例如发回允许的方法,则可以使用MEL(Mule EXPRESSION语言-)查询http.method参数和选择路由器,如: <choice doc:name="Choice"> <when expression="#[message.inboundProperties['http.method']

我想知道是否有一种基于HTTP方法过滤/路由消息的方法。我希望做的是不处理使用OPTIONS方法发布的传入请求。(这是用于跨源资源共享处理)

如果您希望对选项请求执行某些操作,例如发回允许的方法,则可以使用MEL(Mule EXPRESSION语言-)查询http.method参数和选择路由器,如:

<choice doc:name="Choice">
    <when expression="#[message.inboundProperties['http.method'] == 'OPTIONS']">
        <http:response-builder status="200"
            doc:name="HTTP Response Builder(200 - OPTIONS)">
            <http:header name="Allow" value="GET" />
            <http:header name="Content-Type" value="#[null]" />
            <set-payload value="#[null]" />
        </http:response-builder>
    </when>
    <otherwise>
        <!-- Do something else -->

    </oherwise>
</choice>

或者,如果您只想删除消息(如果不是),则可以使用表达式筛选器选项:

<expression-filter
expression="#[message.inboundProperties['http.method'] != 'OPTIONS']" />

有关路由和筛选的更多信息,请单击此处:


另一种解决方案是,您可以将
消息筛选器
不筛选器
消息属性筛选器一起使用,并且在HTTP选项请求上返回
405方法不允许
,但筛选器不接受该方法

下面是一个示例流

<flow name="filterOptionsMethod">
    <http:listener config-ref="httpListener" path="/test" doc:name="receiveReq" />
    <message-filter onUnaccepted="set405" doc:name="filterOptionsMethod">
        <not-filter>
            <message-property-filter pattern="http.method=options" caseSensitive="false" scope="inbound" />
        </not-filter>
    </message-filter>
</flow>

我喜欢使用choice路由器来选择在那里做一些事情。太好了,谢谢!
<sub-flow name="set405">
    <set-property propertyName="http.status" value="405" doc:name="405" />
    <set-payload value="HTTP method OPTIONS not allowed" doc:name="setRes" />
</sub-flow>