您的位置:首页 > 理论基础 > 计算机网络

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

2011-02-23 14:25 447 查看
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 (测试用)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐