0

現在使用しているアプリケーションでは、ほぼすべてのコントローラーで(認証されたユーザーアカウントに関連する)いくつかのエンティティを取得していることがわかりました。これらのエンティティはormレイヤーにキャッシュされますが、これらのエンティティは、認証時に1回ロードし、アプリケーションのカスタムIPrincipalオブジェクトにいくつかのプロパティを追加するのに適しているようです。

私が考えていたもう1つのオプションは、カスタムコンテキストオブジェクト(ユーザーに関連するアカウントオブジェクトを使用)を作成し、それを現在のリクエストで渡すことでした。

どちらのアプローチにもメリット/デメリットはありますか?このような一般的に使用されるオブジェクトを処理する別の方法はありますか?

4

1 に答える 1

1

リクエストごとに IPrincipal/IIdentity のインスタンスが再作成されるという事実を見逃しているようです。明示的な方法で永続化しないと、どこにも永続化されません。

データを保持するカスタム プリンシパル クラスとキャッシュされたアンビエント プロパティの間にパフォーマンスの違いがあるとは思いません。

一方、カスタム認証クラスの欠点はAuthenticateRequest、処理パイプラインのイベント中にこれらのインスタンスが再作成されるように、カスタム認証モジュールを提供する必要があることです。つまり、 FormsAuthenticationModule を独自のものに置き換える必要があります。これは難しいことではありませんが、絶対に必要でない場合は実行しません。

一部のデータは、フォーム Cookie の UserData セクションに保持できることにも注意してください。これは、Cookie が有効であり、一度しか作成できない限り保持できることを意味します。

于 2012-05-26T20:10:21.857 に答える