利用HttpModule 检查用户是否有权限打开指定的网址

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 (测试用)

posted @ 2011-02-21 17:11 郑文亮 阅读(...) 评论(...) 编辑 收藏