3

一部のデータ操作を処理するビジネス層を持つ Web プロジェクトがあります。Sessionメソッドを実行する前に、有効な終了していないアクティブがあるかどうかを確認して、一部またはすべてのメソッドを保護したいと思います。

最初はAttributeオーバークラスを使おうと思ったのですが、うまく動かせませんでした。クラスは通常のクラスであり、から派生したものではないためSystem.Web.Page。必要な BL インスタンスが呼び出されたときに属性クラスが実行されることはありません。さらに、一部のメソッドは有効なセッションを必要としない場合があるため、クラス全体で完全なセキュリティが必要ない場合があります。また、メソッドの開始ごとにセッションをチェックする行を追加することは、あまり有望ではないように思えます。

なぜ方法で保護する必要があるのか​​と聞かれたら、次のように説明できます。

  • これはウェブプロジェクトです
  • 人はそれを埋めることから始めるかもしれませんが、その瞬間にそれを保存することはありませんでした
  • その画面は約30分待ちます
  • セッションはすでに終了しています
  • ユーザーはコンピューターの前に戻り、[保存] ボタンをクリックしますが、プロセスは完了しません。

保存操作は簡単にDELETE操作またはSELECT.

フォームなどの TYPE がたくさんあるのでBL.ItemManagerBL.VideoManagerBL.ServiceManagerなどがあります。これらのクラスの内部には、save、delete、select メソッドがたくさんあります。

したがって、プロセスを実行する前にセッションをチェックして、いくつかのメソッドを保護するためのきちんとした方法はありますか?

4

4 に答える 4

1

AOP は、要件を満たす優れた手法です。PostSharp と Castle の DynamicProxy を使用できます。これらのフレームワークを使用すると、メソッド呼び出しをインターセプトでき、インターセプターでセキュリティ チェックを実行できます。

PostSharp と Castle DynamicProxy の最大の技術的な違いは、PostSharp が IL コードを変更することです。ここで、Castle DynamicProxy はクラスの派生型を作成し、実行時に new 派生のインスタンスを提供します。これは、PostSharp を使用するコードを逆コンパイルすると、元の C Sharp コードで記述されていない他のコードが表示されることを意味します。

DynamicProxy アプローチを選択する場合は、ファクトリを介してクラスをインスタンス化する必要がありますが、PostSharp を使用する場合は、クラスを直接使用できます。必要なのは、いくつかの属性を追加することだけです。一方、PostSharp は無料ではありません。

最後に、自分で DynamicProxy を実装できます。これは私が書いた簡単な DynamicProxy ジェネレーターです。メソッド呼び出しの前後、およびエラー イベントで処理できます。これは単なるサンプル コードであり、重要なアプリケーションで使用する予定がある場合は、Castle を使用することをお勧めします。

于 2013-02-04T09:20:31.127 に答える
0

もう 1 つの可能性は、キャッスル ダイナミック プロキシを使用することです。これでサービスをラップします。動的プロキシを使用すると、メソッド呼び出しをインターセプトし、それらをいくつかの一般的な動作でラップできます。必要な特定のメソッドのみをインターセプトし、セッション チェックを追加できます。

Postsharp とは異なり、Dynamic Proxy は無料です。

于 2013-02-04T09:11:08.263 に答える
0

AOPは間違いなくこれを行うための方法です。他の回答で既に提案されている汎用 AOP フレームワークに加えて、.NET フレームワークには、このタイプのセキュリティ検証のための AOP メカニズムが含まれていることに興味があるかもしれません。これを使用するには、単純にCodeAccessSecurityAttributeから継承する属性を作成 (および使用) し、セッションの有効性を検証するために使用できる IPermission 実装を使用します

于 2013-02-06T18:32:30.433 に答える