私は Mule を初めて使用します。リプレイ攻撃を防ぐために、URI からタイムスタンプとナンス パラメータを検証したいと考えています。タイムスタンプとノンスが有効な場合 (検証プロセスが複雑な場合)、選択ルーターを使用して、リクエストをバックエンド REST サービスに転送し、それ以外の場合はエラー コードとメッセージを返します。Choice-when の MEL の使用法がたくさん見つかりましたが、Java を使用してカスタム エクスプレッションを定義できますか? 利用可能な例はありますか?URI の例:
http://muledemo.org/ci2/ni/del?id=0xe413×tamp=1376022133&nonce=a03ed9c
コード スニペット:
<choice doc:name="Choice">
<when expression="???how to call a java validator???">
</when>
<otherwise>
<processor-chain doc:name="Processor Chain">
<echo-component doc:name="Echo" />
<http:outbound-endpoint exchange-pattern="request-response" method="POST"
address="http://localhost:8081#[message.inboundProperties['http.request']]" doc:name="HTTP" />
</processor-chain>
</otherwise>
</choice>
編集:
XML 構成:
<spring:beans>
<spring:bean id="replayAttackCheck" class="org.jamee.demo.mule.ReplayAttackCheck"/>
</spring:beans>
... ...
<when expression="#[replayAttackCheck.validate(payload)]">
<expression-component doc:name="Check Required Params"><![CDATA[payload="{\"code\":\"PA002\", \"message\":\"timestamp or nonce is illegal\"}"]]>
</expression-component>
</when>
エラーログ:
ERROR 2013-08-09 14:32:39,090 [[demo.router].connector.http.mule.default.receiver.02] org.mule.exception.DefaultMessagingExceptionStrategy:
********************************************************************************
Message : Execution of the expression "replayAttackCheck.validate(payload)" failed. (org.mule.api.expression.ExpressionRuntimeException). Message payload is of type: HashMap
Code : MULE_ERROR--2
--------------------------------------------------------------------------------
Exception stack is:
1. [Error: unresolvable property or identifier: replayAttackCheck]
[Near : {... replayAttackCheck.validate(pay ....}]