1、创建SessionFilterModule
using System;
using System.Web;
namespace Com.Alipay {
public class SessionFilterModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
public void Dispose()
{
}
private void context_BeginRequest(object sender, EventArgs e)
{
// 获取当前请求的 Page 实例
var currentPage = HttpContext.Current.Handler as System.Web.UI.Page;
// 判断当前页是否需要过滤器
if (currentPage != null && currentPage.GetType().GetCustomAttributes(typeof(SessionFilterAttribute), true).Length > 0)
{
// 判断 Session["users"] 是否有值
if (HttpContext.Current.Session["users"] == null)
{
// 执行重定向到主页
HttpContext.Current.Response.Redirect("~/Default.aspx");
}
}
}
}
}
2、创建 SessionFilterAttribute类,并继承Attribute,AttributeTargets.Class 可以改变枚举值,在方法上或者在类上.....AllowMultiple
参数设置为 false
,表示同一个类或方法上只能应用一个 SessionFilterAttribute
特性实例。如果需要允许多个特性实例应用到同一个类或方法上,请将其设置为 true
using System;
namespace Com.Alipay
{
/// <summary>
/// SessionFilterAttribute 的摘要说明
/// </summary>
[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class SessionFilterAttribute : Attribute
{
}
}
3、在项目根目录下修改 Global.asax,注册SessionFilterModule
void Application_Start(object sender, EventArgs e)
{
//在应用程序启动时运行的代码
// 注册自定义的模块
Com.Alipay.SessionFilterModule module = new Com.Alipay.SessionFilterModule();
module.Init(this);
}
4、在 <system.webServer> 中的 <modules>的标签中添加 <add name="SessionFilterModule" type="Namespace.SessionFilterModule" /> ,Namespace为命名空间
在 IIS 7 以下的版本中,应用以下配置:
<system.web>
<httpModules>
<add name="PermissionHttpModule" type="TestPermission.PermissionHttpModule,TestPermission"/>
</httpModules>
</system.web>
在 IIS 7 及以上的版本中,应用以下配置
<system.webServer>
<modules>
<add name="PermissionHttpModule" type="TestPermission.PermissionHttpModule,TestPermission"/>
</modules>
</system.webServer>