ASP.NETのURLフィルタリング

7628 ワード

最近のWebプロジェクトではURLをフィルタリングする必要がありますが、ネットで検索するとJ 2 EEにFilterのものがあることがわかりました.NET側も、実は実現できます.
次はクラスの定義です.
 1 using System;

 2 using System.Web;

 3 using System.Web.SessionState;

 4 

 5 namespace QTJZ

 6 {

 7     public class Filters : IHttpModule, IRequiresSessionState

 8     {

 9         public void Dispose() { }

10 

11         public void Init(HttpApplication application)

12         {

13             application.AcquireRequestState += new EventHandler(application_AcquireRequestState);

14         }

15 

16         public void application_AcquireRequestState(object sender, EventArgs e)

17         {

18             HttpApplication application = sender as HttpApplication;

19             HttpRequest request = application.Request;

20             HttpResponse response = application.Response;

21 

22             string url=request.CurrentExecutionFilePath.Trim('/');

23             string suffix = request.CurrentExecutionFilePathExtension.Trim('.');

24 

25             if (!url.Equals("Default.htm") && (suffix == "aspx" || suffix == "htm"))

26             {

27                 object sessionObj = application.Context.Session == null ? null : application.Session["useID"];

28                 if (sessionObj==null)

29                 {

30                     response.Redirect("~/Default.htm");

31                 }

32             }

33         }

34     }

35 }

フィルタリングの効果を実現するために、FiltersクラスはIHttpMoeldインタフェースを実現する必要があり、このインタフェースを実現するには2つの方法が必要である.1つはDisposeであり、もう1つはInitである.Initのパラメータは、いくつかのイベントを登録するHttpApplicationタイプのインスタンスです.URLをフィルタリングするため、AcquireRequestStateイベントが登録されています.類似事件は次のように羅列されている.
BeginRequest
ASP.NET応答要求時にHTTP実行パイプラインチェーンの最初のイベントとして発生する.
AuthenticateRequest
セキュリティモジュールがユーザーIDを確立したときに発生します.
AuthorizeRequest
セキュリティモジュールがユーザーの認証を検証したときに発生します.
ResolveRequestCache
ASP.NETは、キャッシュモジュールがキャッシュから要求にサービスを提供した後にイベントハンドラ(ページやXML Webサービスなど)の実行を迂回するように許可イベントを完了する.
AcquireRequestState
ASP.NETが現在のリクエストに関連付けられた現在のステータス(セッションステータスなど)を取得したときに発生します.
PreRequestHandlerExecute
ちょうどASP.NETがイベントハンドラ(例えば、ページやXML Webサービス)の実行を開始する前に発生します.
PostRequestHandlerExecute
ASP.NETイベントハンドラ(ページやXML Webサービスなど)の実行が完了したときに発生します.
ReleaseRequestState
ASP.NETがすべてのリクエストイベントハンドラを実行した後に発生します.このイベントにより、ステータスモジュールに現在のステータスデータが保存されます.
UpdateRequestCache
ASP.NETは、イベントハンドラを実行して、キャッシュモジュールが、キャッシュから後続の要求にサービスを提供するために使用される応答を格納するときに発生する.
EndRequest
ASP.NET応答要求時にHTTP実行パイプラインチェーンの最後のイベントとして発生する.
ジャンプするurlを取得するにはrequestのCurrentExecutionFilePathプロパティを使用しますが、取得要求ファイルの接尾辞はCurrentExecutionFilePathExtensionを使用します.どのルールで判断するかは、必要に応じて決まります.ここではリクエスト時にセッションが存在するかどうかを判断し、存在しない場合はログインページにジャンプします.セッションを使用するため、ページを開くと例外が放出されます.例外情報は「セッションステータスはこのコンテキストでは使用できません.」です.IRequiresSessionStateインタフェースを実現した後は異常放出はなかった.
また、プロファイルWebでconfigのノードの下に次のコードを追加
       <httpModules>

        <add name="filters" type="QTJZ.Filters"/>

      </httpModules>

ここでtype属性は上のFiltersクラスの完全限定名である