1

概要

spring web サービスと spring security を使用して web サービスクライアントのセッションを取得するにはどうすればよいですか?

詳細

提出後

<form method="POST" action="<c:url value="/j_spring_security_check" />">...</form>

次のことができることに気付きました。

public class MyUserDetailsService implements UserDetailsService {}

loadUserByUsername(String username)これにより、送信されたユーザー名を取得し、データベース ルックアップを実行してユーザー オブジェクトを返すことができるように、メソッドをオーバーライドできます。

ただし、私が抱えている問題は、どこSecurityContextHolderに設定されるかわからないことです。次のコード行を使用して、ユーザー オブジェクトを取得できます。

User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

しかし、そもそもどのように設定されるのかわかりません。上記のフォームを送信してからの流れを知りたいので、どのようSecurityContextHolderに設定されているかを知りたいです。

これを知りたい理由は、クライアントがリクエストごとに資格情報を再送信するのではなく、Web サービス クライアント認証の「セッション」として使用したいからです。


春のバージョン: 3.0.2.RELEASE

4

1 に答える 1

2

/j_spring_security_checkUsernamePasswordAuthenticationFilterwhich extendsによって処理されますAbstractAuthenticationFilter。セキュリティ コンテキストは、後者の successfulAuthenticationメソッドで設定されます。

ただし、Web サービス クライアントは通常ステートレスであり、共有シークレットを使用する基本認証などを使用する可能性が高くなります。セキュリティ コンテキストの内容に基づいて独自のセッション システムを展開することに大きなメリットがあるかどうかはわかりません。パフォーマンスが心配な場合は、サーバー上の認証情報のキャッシュを使用できます。

于 2012-07-13T17:14:24.447 に答える