2010-11-26 10 views
0

ユーザーが認証されると、私はオブジェクトuserIDを持っています。webappのどこでユーザーIDキーをspring/spring-securityに格納する必要がありますか?

Spring Security(これはWebアプリケーション)を使用してSpringに保存するのに最適な場所はどこですか?

  • セッションは、その後、私は認証を管理する2箇所を持っているので、
  • currentContext.getAutentication()(私は、ユーザーが何らかの理由でログアウトされsesionオブジェクトを削除し管理するために、特別なコードが必要)、洗練ようだ。getDetailsを(...)は、要求ごとに詳細オブジェクトを生成するように見えるため、複雑に思えます。

多くのオプションがありますが、Spring Securityの認証メカニズムの近くにあるようです。

答えて

1

私は質問についてよく分かりません。あなたはそれを保管する必要はありません。それを得るための複数の方法があります。

  1. SecurtiryContextHolderあなたが唯一のログインIDが必要な場合)UserDetailsは
  2. request.getRemoteUserを(オブジェクトが必要な場合
+0

SecurityContextHolderは、任意のObjectではなく、Stringユーザー名のみを返すことができます。私は、認証メカニズムを拡張して、独自のカスタム認証オブジェクトを返すようにしました。これは、任意のオブジェクトをマップに追加することをサポートし、必要な余分なオブジェクトをタックし、認証プロセス全体に密接につなぎます。 –

+0

あなたのソリューションに関するいくつかのコードや詳細を公開してもよろしいですか? – Czar

0

私はあなたがuserIDを使用する方法に強く依存すると信じています。

たとえば、ビジネスサービスレイヤー内でユーザーIDを深く必要とし、ビジネスサーバーレイヤーがWebアプリケーションの内容(セッション、...)について何も知らないように実装されている場合、これまでは賢明ではありませんHttpSessionを使用して、 "Web stuff free"にします。

BTW: 3つ目の方法は、セッションスコープBeanを使用することです。

+0

私は私のようにそれを渡しますそこから、コントローラにユーザーIDのオブジェクトにアクセスしたいですサービスへのパラメータ。 SecurityContextHolderはそれを認証メカニズムと結びつけて論理的に見えましたが、私が見たことを行う簡単な方法はありません。セッションは大したものではありませんでした。なぜなら、ログイン/ログアウト時にセッションを更新するコードを書く必要があったからです。私は人々が使うもう一つの共通のアプローチが存在するかどうか疑問に思った。私のサービスメソッドの多くは、特定のユーザーのDB内のデータを参照するためのキーとしてこれを必要とします。 –

+0

セッションスコープBean?それはどのように見えますか/仕事ですか? – Czar

+0

@Czar: '@Scope(値= WebApplicationContext.SCOPE_SESSION、proxyMode = ScopedProxyMode.TARGET_CLASS)' - http://static.springsource.org/spring/docs/3.0.x/reference/beans.html#beans-factory- scope-other – Ralph

1

リクエストごとに認証の詳細が作成されているとは思いません。私は彼らが認証ごとに一度作成されると信じています。

関連する問題