利用HttpModule 檢查使用者是否有許可權開啟指定的網址

weixin_34391854發表於2011-02-21

1. 建立一個網站專案
2. 在app_code 裡面 新建立一個類
   /// <summary>

/// 說明:檢查使用者是否有權使用模組的Module

/// 作者:鄭文亮

/// 聯絡:http://www.cnblogs.com/zhwl

/// </summary>

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;


public class SystemModuleAuthorizationModule : IHttpModule
{

    #region IHttpModule 成員

    public void Dispose()
    {

    }

    public void Init(HttpApplication context)
    {

        context.AcquireRequestState += new EventHandler(context_AcquireRequestState);

    }

    void context_AcquireRequestState(object sender, EventArgs e)
    {

        HttpApplication application = (HttpApplication)sender;

        string d =  application.Request.Url.ToString();

        // 如果使用者未登入,則無需檢查模組授權,因為請求會被使用者登入Module重定向到登入頁面。

        if (application.Session["UserName"] == null)
        {

            string requestUrl = application.Request.Url.ToString();

            string requestPage = requestUrl.Substring(requestUrl.LastIndexOf('/') + 1);

            // 如果請求的頁面不是登入頁面,剛重定向到登入頁面。

            if (requestPage != "Login.aspx")

                application.Server.Transfer("Login.aspx");

            return;
        }


        // 獲取使用者名稱和Url

        string userName = application.Session["UserName"].ToString();

        string url = application.Request.Url.ToString();

        // 如果使用者沒有被授權,請求被終止,並列印提示資訊。

        if (!Validator.CanUseModule(userName, url))
        {

            application.CompleteRequest();
            application.Response.Clear();
            application.Response.Write(string.Format("對不起!{0},您無權訪問此模組!", userName));

        }
        else
        {
            application.Response.Write(string.Format("歡迎您!{0}!", userName));
        }

    }

    #endregion

}

public class Validator
{

    /// <summary>

    /// 檢查使用者是否被授權使用模組。

    /// aaa可以使用模組 a.aspx, 其他的情況返回false

    /// </summary>

    /// <param name="userName"></param>

    /// <param name="url"></param>

    /// <returns></returns>

    public static bool CanUseModule(string userName, string url)
    {
        if (url.Contains("login.aspx") == true)
        {
            return true;
        }
        if (userName == "aaa" && url.Contains("a.aspx"))
        {

            return true;

        }
        else
        {
            return false;
        }

    }

}


3. web.config 檔案 配置如下

   <httpModules>
    
      <add name="SystemModuleAuthorizationModule" type="SystemModuleAuthorizationModule" />
    </httpModules>

     備註: 因為類檔案放在app_Code 下面 所以沒有加名稱空間的名稱(不需要)

    如果是一個wen應用程式

   <system.web>

     <httpModules>
      <add name="SystemModuleAuthorizationModule" type="WebApplication3.SystemModuleAuthorizationModule" />
    </httpModules>
  </system.web>

   註解: WebApplication3 是這個專案的名稱空間

4. 建立login.aspx 裡面有一個按鈕

    後臺檔案:
    protected void Button1_Click(object sender, EventArgs e)
    {
        Session["UserName"] = TextBox1.Text.Trim();
    }
    前臺頁面 :
     <div>
    <a href="a.aspx">頁面a</a>
    </div>
    <div>
    <a href="b.aspx">頁面b</a>
    </div>
5. 建立一個空的a.aspx 和 b.aspx (測試用)

相關文章