3

Tomcat 7で実行されているSwingクライアントとサーバーがあり、Spring(3.1)HTTPインボーカーを使用して互いに通信します。これまでのところ、通信は (TSL を使用しても) 正常に機能していますが、Spring Security を追加しようとしています。

補足: 一般的な Web アプリケーションでは、基本認証を使用してユーザーを認証します。CustomAuthenticationProvider がユーザーの Authentication オブジェクトを返した後、すべてが「正常に動作」します。つまり、それ以降のすべてのリクエストで SecurityContext が自動的に設定されます。ログインは、セッションを識別するためにリクエストごとに送信されるセッションキーをクライアントに返すと思います。

それは私が HTTP-Invoker で探しているものです。現時点では、私の customAuthenticationManager.authenticate(Authentication auth) メソッドはかなりコストがかかり、実際にはユーザーセッションごとに 1 回だけ呼び出す必要があるため、すべてのリクエストで新しいコンテキストを取得しているように見えますが、これは悪いことです。

何か案が?

編集http://forum.springsource.org/showthread.php?10764-Maintaing-State-while-using-HttpInvokerでこれに関するいくつかのヒントを見つけましたが、このリンクは8年以上前のものであるため、より簡単な解決策。

4

1 に答える 1

3

私は今解決策を見つけました。最初に、Spring-Security の部分が Web アプリケーションの場合とまったく同じであることを知っておく必要があります (これは素晴らしいことです)。

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

于 2012-03-07T07:38:43.593 に答える