2009-05-27 8 views
1

次のように私は、メソッドのシグネチャとDWR作用を有する:春インターセプタでDWRポストデータへのアクセス

String joinGroup(String groupId, String groupName); 

これはDWR AJAX要求によって呼び出され、正常に動作しています。

しかし、私は、DWRアクションが呼び出される前に、いくつかの認証作業を行うためにSpringインターセプタ(ServletFilterとよく似ています)を記述しようとしています。
インターセプタが正しく呼び出されていますが、インターセプタのgroupIdとgroupNameデータにアクセスする必要があります。

リクエストパラメータマップが空であり、デバッガのリクエスト属性のリスト全体を処理しているため、どこにでもデータが表示されません。
リクエストのpostDataもnullです。

Firebugを使用すると、データがサーバーに渡されていることがわかります(joinGroupメソッドが最終的に呼び出されたときにそこにあります)。
私のインターセプタではアクセスできないようです。

私はそれに全くアクセスする方法はありますか?

答えて

2

使用org.directwebremoting.AjaxFilter

AjaxFilterのdoFilterメソッドは、DWRによってAjaxリクエストが、このフィルタは反対に構成されている方法で行われるたびに呼び出されます。このメソッドに渡されたAjaxFilterChainは、メソッド詳細をチェーン内の次のエンティティに渡すことをフィルタに許可します。

典型的方法は、以下の操作を行います:

  1. 要求は任意で方法、オブジェクトまたは
  2. パラメータAjaxFilterChainを用いてチェーン内の次のエンティティを呼び出すか、取ることを決定するのいずれかを変更調べ代わりにいくつかのアクション。
  3. は必要に応じて、私は怖いのAcegiを使用していない他のいくつかのアクション(例えば、ロギング)
+0

これは質問を投稿した後に見つけた解決策でした。 –

1

MethodInterceptor(あなたの設定が正しいことを意味しています)が上記の方法でのみ使用されているとします。

... 
@Override 
public Object invoke(MethodInvocation inv) throws Thorwable { 
    Object[] args = inv.getArguments(); 
    String groupId = args[0]; 
    String groupName = args[1]; 
    .... if user has access call inv.proceed, else throw AccessDeniedException 
} 

春FrameworkのMethodInterceptorのはかなり春のセキュリティでMethodSecurityInterceptorと全く同じです。

+0

Hiyaを取るユーザー

  • に返された値を変更します。 私はまもなく投稿する代替ソリューションをとにかく見つけました。 –

  • +0

    ああ、私が "認証"という言葉を見たとき、私はあなたがスプリングセキュリティかAcegiを使っていると思った。 – Gandalf

    +0

    同じ考え方...ちょうどSpring AOPを使用してメソッド呼び出しをインターセプト –

    関連する問題