我想知道是否有一种基于 HTTP 方法过滤/路由消息的方法。我要做的是不处理已使用 OPTIONS 方法发布的传入请求。(这是用于跨域资源共享处理)
问问题
3385 次
2 回答
5
如果你想做某事,你可以使用 MEL(Mule Exression Language - http://www.mulesoft.org/documentation/display/current/Mule+Expression+Language+MEL )来查询 http.method 参数和选择路由器使用 OPTIONS 请求,例如发回允许的方法,如下所示:
<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://www.mulesoft.org/documentation/display/current/Routing+Message+Processors
http://www.mulesoft.org/documentation/display/current/Using+Filters
于 2013-05-15T09:21:57.317 回答
0
另一种解决方案是,您可以在过滤器不接受的 HTTP OPTIONS 请求上使用message-filter
与not-filter
和message-property-filter
返回。405 method not allowed
下面是一个示例流程
<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>
和onUnaccepted
<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>
于 2015-11-26T12:03:24.250 回答