第一步:
创建isAuthorizeAttribute类
/// <summary>
/// 身份验证过滤器
/// </summary>
public class isAuthorizeAttribute : AuthorizeAttribute
{
/// <summary>
/// 用来获取上一个页面
/// </summary>
public static string LastPage;
/// <summary>
/// 当AuthorizeCore返回false时执行
/// </summary>
/// <param name="filterContext"></param>
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
LastPage = filterContext.HttpContext.Request.UrlReferrer != null ? filterContext.HttpContext.Request.UrlReferrer.ToString() : "";
//此处为当需要跳转到的登录页
filterContext.HttpContext.Response.Redirect("/Home/Login");
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
//根据需要添加,将自动根据返回值判断用户是否通过验证
//true:通过
//false:未通过
bool result = false;
if(//此处为判断储存的用户状态是否失效){
//失效则result =false;
}else{
//result =true;
}
return result;
}
}
第二步:
再App_Start的FilterConfig中加入isAuthorizeAttribute过滤器
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
//此处为添加isAuthorizeAttribute过滤器
filters.Add(new isAuthorizeAttribute()); //身份验证过滤器
}
}
第三步:
在Global.asax中添加自定义的过滤器
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RouteConfig.RegisterRoutes(RouteTable.Routes);
//添加自定义的过滤器
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
}
}
此时如果进入网站,则会一直加载不出
原因:登录页也成了被过滤器验证的页面
解决方法:在涉及到登陆操作的Action上加[AllowAnonymous]特性,
[AllowAnonymous]:该特性用于标记在授权期间要跳过 System.Web.Mvc.AuthorizeAttribute 的控制器和操作。
[AllowAnonymous]
public ActionResult Login(string UserName,string UserPwd)
{
}