0

Spring Security / MVCの前は、セッションに保存された単純な比較的安全でないユーザーオブジェクトがあり、大量のデータを保持し、サービスロジックを更新してから、変更を加えるたびにセッションに保存していました。

これで、同じ複雑なデータ構造を持つプリンシパルオブジェクトとしてユーザーオブジェクトを正常にロックダウンできました。以前と同様に、初期状態が保存された認証後にuserObjectをビューで使用できますが、UserDetailsを実装するuserObjectは変更できないようです(リクエストごとに新しい認証オブジェクトを作成する必要があります)。確かに、セッションで行っていたように、変更されたSecurityContextに戻すことはできません。

だから私はどちらかが必要だと思っています:

A. UserObjectを再構築して、他のすべてのものを取り出し、カスタムフィルターで認証した後、それらをセッションに追加します。

B.変更のたびに新しい認証オブジェクトを作成します(非常に高額に聞こえます...)

C.私がまだ見たり理解したりしていない他のこと...

私は多くの答えをチェックしました、そしてそれは一般的な問題のようです、しかしどれも私の特定の懸念/質問に対処しません。私はここで本当に明白な何かを逃していますか?

4

1 に答える 1

0

私はあなたが何かを逃しているとは思わない。UserDetailsオブジェクトの目的は、オブジェクトが不変であることです。これは、認証プロセスの一部としてUserDetailsS​​erviceによってロードされることになっています。

私はAに投票します:ユーザーオブジェクトを再構築し、セッションにできるだけ少なくします。実際には、ユーザーオブジェクトは、アプリケーションに関連する権限と、場合によってはあまり変更されないユーザー属性(名前、タイトルなど)のみを格納し、アプリケーションが表示または処理の目的でそれらを必要とする場合にのみ格納する必要があります。ユーザーがアプリケーションを使用するときに蓄積しているデータ(習慣の追跡、クリックなど)を保存してはなりません。これは、データベースなどの他の場所に保存する必要があります。

于 2012-05-24T15:15:07.907 に答える