0

私は Mule を初めて使用します。リプレイ攻撃を防ぐために、URI からタイムスタンプとナンス パラメータを検証したいと考えています。タイムスタンプとノンスが有効な場合 (検証プロセスが複雑な場合)、選択ルーターを使用して、リクエストをバックエンド REST サービスに転送し、それ以外の場合はエラー コードとメッセージを返します。Choice-when の MEL の使用法がたくさん見つかりましたが、Java を使用してカスタム エクスプレッションを定義できますか? 利用可能な例はありますか?URI の例:

http://muledemo.org/ci2/ni/del?id=0xe413&timestamp=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 ....}]
4

2 に答える 2

4

正しい MEL 構文:

<when expression="#[app.registry.replayAttackCheck.validate(payload)]">
于 2013-08-09T16:26:49.540 に答える
0

完全修飾パスを使用するだけです

#[com.mulesoft.foo(payload, someFooVar)]

または、構成でアプリに対してグローバルに定義し、MEL 式で「foo」関数を使用することもできます。

<configuration doc:name="Config">
    <expression-language autoResolveVariables="false">
        <global-functions>
            def foo(fooVar){
            return com.mulesoft.foo(payload, fooVar);
            }                
        </global-functions>
    </expression-language>
</configuration>
于 2013-08-09T06:05:36.260 に答える