Asp.Netの下でHttpModuleシミュレーションFilterを使用して、権限制御を実現する
4611 ワード
asp.Netでは,ユーザが指定されたページに直接アクセスすることを防止するためにログイン検証を迂回するために,各ページに検証を加えるか,テンプレートページに検証を加える必要がある.プロジェクトが大きければ、検証を追加するのは狂ったことですが、今回はHttpModuleを利用して権限検証を実現する方法を共有します.
ステップ1:
プロジェクトにクラスを新規作成します.csファイル、この例はFilterで、名前空間を適用して、主にSessionにアクセスするためです.
ステップ2:このクラスにIHttpModelとIrequiresSessionStateインタフェースを継承させます.コードは次のとおりです.
ステップ3:Ihttpmodelインタフェースを実装する2つの方法:
ステップ4:作成方法context_AcquireRequestState、権限の認証を実現します.コードは以下の通りです.
ステップ5:AcquireRequestStateメソッドの登録:
これで、この権限認証が完了~~
注意事項:BeginRequestというメソッドは使用できません.BeginRequestメソッドはセッションにアクセスできません.エラーが発生します.具体的には、なぜか、上級者に説明してください.
HttpModelのイベントおよび実行順序は次のとおりです.
AcquireRequestState当ASP.NET実行時に現在のHTTPリクエストのセッションステータスを受信する準備ができている場合にこのイベントを開始します.AuthenticateRequest当ASP.NET実行時にユーザ認証の準備をしている間にこのイベントが発生します.AuthorizeRequest当ASP.NET実行時にユーザにリソースへのアクセスを許可する準備をしている間にこのイベントが発生します.BeginRequest当ASP.NET実行時に新しいHTTPリクエストを受信したときにこのイベントが発生します.Disposed当ASP.NETがHTTPリクエストの処理を完了すると、このイベントが発生します.EndRequestは、応答内容をクライアントに送信する前にこのイベントを開始します.ErrorはHTTPリクエストの処理中に未処理の例外が発生した場合にこのイベントを開始する.PostRequestHandlerExecuteは、HTTPプロセッサの実行が終了したときにこのイベントを開始する.PreRequestHandlerExecuteはASP.NETがHTTPリクエストのハンドラを実行する前にこのイベントを開始する.この事件の後、ASP.NETはこの要求を適切なHTTP処理プログラムに転送する.PreSendRequestContentはASP.NETは応答内容をクライアントに送信する前にこのイベントを開始する.このイベントでは、コンテンツがクライアントに到達する前に応答コンテンツを変更できます.このイベントを使用して、すべてのページに使用するコンテンツをページ出力に追加できます.たとえば、汎用メニュー、ヘッダ情報、または足情報などです.PreSendRequestHeadersはASP.NETがHTTP応答ヘッダ情報をクライアントに送信する前にこのイベントを開始する.このイベントは、ヘッダ情報がクライアントに到達する前に、その内容を変更することができます.このイベントを使用して、ヘッダ情報にクッキーとカスタムデータを追加できます.ReleaseRequestState当ASP.NETが検索したリクエストハンドラの実行を終了すると、このイベントが発生します.ResolveRequestCacheこのイベントを開始し、出力バッファから返されたコンテンツを使用してリクエストを終了できるかどうかを決定します.これは,Webアプリケーションの出力バッファをどのように設定するかに依存する.UpdateRequestCache当ASP.NETが現在のHTTPリクエストの処理を完了し、出力内容が出力バッファに追加される準備ができているときに、このイベントが発生する.これは、Webアプリケーションの出力バッファがどのように設定されているかに依存します.
ステップ1:
プロジェクトにクラスを新規作成します.csファイル、この例はFilterで、名前空間を適用して、主にSessionにアクセスするためです.
using System.Web.SessionState;
ステップ2:このクラスにIHttpModelとIrequiresSessionStateインタフェースを継承させます.コードは次のとおりです.
public class Filter : IHttpModule, IRequiresSessionState
{
}
ステップ3:Ihttpmodelインタフェースを実装する2つの方法:
public void Dispose()
{
}
public void Init(HttpApplication context)
{
}
ステップ4:作成方法context_AcquireRequestState、権限の認証を実現します.コードは以下の通りです.
void context_AcquireRequestState(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
try
{
string path = context.Request.Path;
if (context.Session != null && context.Session["User"] == null )
{
context.Response.Redirect("~/Default.aspx");
}
}
catch (Exception)
{
context.Response.Write(" , ......");
}
}
ステップ5:AcquireRequestStateメソッドの登録:
public void Init(HttpApplication context)
{
context.AcquireRequestState += new EventHandler(context_AcquireRequestState);
}
これで、この権限認証が完了~~
注意事項:BeginRequestというメソッドは使用できません.BeginRequestメソッドはセッションにアクセスできません.エラーが発生します.具体的には、なぜか、上級者に説明してください.
HttpModelのイベントおよび実行順序は次のとおりです.
AcquireRequestState当ASP.NET実行時に現在のHTTPリクエストのセッションステータスを受信する準備ができている場合にこのイベントを開始します.AuthenticateRequest当ASP.NET実行時にユーザ認証の準備をしている間にこのイベントが発生します.AuthorizeRequest当ASP.NET実行時にユーザにリソースへのアクセスを許可する準備をしている間にこのイベントが発生します.BeginRequest当ASP.NET実行時に新しいHTTPリクエストを受信したときにこのイベントが発生します.Disposed当ASP.NETがHTTPリクエストの処理を完了すると、このイベントが発生します.EndRequestは、応答内容をクライアントに送信する前にこのイベントを開始します.ErrorはHTTPリクエストの処理中に未処理の例外が発生した場合にこのイベントを開始する.PostRequestHandlerExecuteは、HTTPプロセッサの実行が終了したときにこのイベントを開始する.PreRequestHandlerExecuteはASP.NETがHTTPリクエストのハンドラを実行する前にこのイベントを開始する.この事件の後、ASP.NETはこの要求を適切なHTTP処理プログラムに転送する.PreSendRequestContentはASP.NETは応答内容をクライアントに送信する前にこのイベントを開始する.このイベントでは、コンテンツがクライアントに到達する前に応答コンテンツを変更できます.このイベントを使用して、すべてのページに使用するコンテンツをページ出力に追加できます.たとえば、汎用メニュー、ヘッダ情報、または足情報などです.PreSendRequestHeadersはASP.NETがHTTP応答ヘッダ情報をクライアントに送信する前にこのイベントを開始する.このイベントは、ヘッダ情報がクライアントに到達する前に、その内容を変更することができます.このイベントを使用して、ヘッダ情報にクッキーとカスタムデータを追加できます.ReleaseRequestState当ASP.NETが検索したリクエストハンドラの実行を終了すると、このイベントが発生します.ResolveRequestCacheこのイベントを開始し、出力バッファから返されたコンテンツを使用してリクエストを終了できるかどうかを決定します.これは,Webアプリケーションの出力バッファをどのように設定するかに依存する.UpdateRequestCache当ASP.NETが現在のHTTPリクエストの処理を完了し、出力内容が出力バッファに追加される準備ができているときに、このイベントが発生する.これは、Webアプリケーションの出力バッファがどのように設定されているかに依存します.