2012-03-05 20 views
3

私は、Spring(3.1)HTTP呼び出しを使用して通信するTomcat 7上で動作するSwingクライアントとサーバーを持っています。これまでのコミュニケーションは(TSLでも)うまくいきましたが、今はSpring Securityを追加しようとしています。Spring HTTP Invokerセッション(状態)ストレージ

side-note:典型的なWebアプリケーションでは、基本認証を使用してユーザーを認証します。私のCustomAuthenticationProviderがユーザーの認証オブジェクトを返した後、すべてが "うまくいく"となり、それ以降のすべての要求に対してSecurityContextが自動的に設定されます。私はログインが、セッションを識別するすべての要求を送信するクライアントにセッションキーを返すと思います。

これは、私がHTTP-Invokerで探しているものです。現時点では、私のcustomAuthenticationManager.authenticate(認証の認証)メソッドはかなりコストがかかるため、ユーザーセッションごとに一度だけ呼び出される必要があるため、リクエストごとに新しいコンテキストが得られるように思えます。

編集 iはhttp://forum.springsource.org/showthread.php?10764-Maintaing-State-while-using-HttpInvokerで、この上でいくつかのヒントを見つけましたが、このリンクはもっとそして8歳として、私は簡単に解決策を期待していました。

答えて

3

解決策が見つかりました。最初に、あなたは春のセキュリティの部分が完全に同じであることを知る必要があります(それは素晴らしいです)。

クライアント側では、より複雑なHTTPクライアントの実装が必要です。私はorg.springframework.remoting.httpinvoker.HttpComponentsHttpInvokerRequestExecutorを使用しました。サーバー側では、create-session="always"-<http要素の属性を使用して、セッションが常に作成されるようにすることができます。しかし、自分でセッションを作成するほうがよい(セッションが存在しない場合はhttpServletRequest.getSession()を呼び出すだけです)、その方法でいつ実行するかを指定できます。私の場合、認証が成功した場合に限り、私のauthenticationProviderでセッションを作成します。

+0

お返事ありがとうございました! 1つの例外を除いて、我々は春2.5.xを使用しています。そこで、org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutorを使用しなければなりませんでした(ここで指摘されているように:http://forum.springsource.org/showthread.php?10764-Maintaing-State-while-using-HttpInvoker) –