標籤:style blog http io ar color os 使用 sp
在asp.net中,我們為了防止使用者直接從Url中訪問指定的頁面而繞過登入驗證,需要給每個頁面加上驗證,或者是在模板頁中加上驗證。如果說項目比較大的話,添加驗證是一件令人抓狂的事情,本次,我就跟大家分享一個利用HttpModule實現許可權驗證的方法。
第一步:
在項目中建立一個類.cs檔案,本例為Filter,應用一下命名空間,主要是為了訪問Session。
using System.Web.SessionState;
第二步:讓這個類繼承IHttpModel和IRequiresSessionState介面,代碼如下:
public class Filter : IHttpModule, IRequiresSessionState{}
第三步:實現Ihttpmodel介面的一下兩個方法:
public void Dispose(){ }public void Init(HttpApplication context){}
第四步:編寫方法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("系統出現錯誤,請稍後訪問......"); } }
第五步:註冊AcquireRequestState方法:
public void Init(HttpApplication context) { context.AcquireRequestState += new EventHandler(context_AcquireRequestState); }
至此,這個許可權認證就完成啦~~
注意事項:不能使用BeginRequest這個方法,BeginRequest方法無法訪問Session,會出現錯誤。具體為什麼,還請高手解釋。
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回應標頭資訊發送給用戶端之前引發這個事件。在頭資訊到達用戶端之前,這個事件允許我們改變它的內容。我們可以使用這個事件在頭資訊中添加cookie和自訂資料。
ReleaseRequestState 當ASP.NET結束所搜有的請求處理常式執行的時候引發這個事件。
ResolveRequestCache 我們引發這個事件來決定是否可以使用從輸出緩衝返回的內容來結束請求。這依賴於Web應用程式的輸出緩衝時怎樣設定的。
UpdateRequestCache 當ASP.NET完成了當前的HTTP請求的處理,並且輸出內容已經準備好添加給輸出緩衝的時候,引發這個事件。這依賴於Web應用程式的輸出緩衝是如何設定的。
REFERENCE FORM : http://www.cnblogs.com/yunfeifei/p/3699937.html
Asp.net下使用HttpModule類比Filter,實現許可權控制