ASP.Net MVC Filter验证用户登录
一、Filter是什么
ASP.NetMVC模式自带的过滤器Filter,是一种声明式编程方式,支持四种过滤器类型,各自是:Authorization(授权),Action(行为),Result(结果)和Exception(异常)。
过滤器类型 |
接口 |
描写叙述 |
Authorization |
IAuthorizationFilter |
此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法 |
Exception |
IExceptionFilter |
用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常 |
Action |
IActionFilter |
用于进入行为之前或之后的处理 |
Result |
IResultFilter |
用于返回结果的之前或之后的处理 |
可是默认实现它们的过滤器仅仅有三种,各自是ActionFilter(方法),Authorize(授权),HandleError(错误处理)。各种信息例如以下表所看到的:
过滤器 |
类名 |
实现接口 |
描写叙述 |
ActionFilter |
AuthorizeAttribute |
IAuthorizationFilter |
此类型(或过滤器)用于限制进入控制器或控制器的某个行为方法 |
HandleError |
HandleErrorAttribute |
IExceptionFilter |
用于指定一个行为,这个被指定的行为处理某个行为方法或某个控制器里面抛出的异常 |
自己定义 |
ActionFilterAttribute |
IActionFilter和IResultFilter |
方法运行前/后的处理。 返回结果的之前或之后的处理。 |
第三种自己定义的过滤器,一定要继承ActionFilterAttribute。
它是ASP.NETMVCFramework提供的基类ActionFilterAttribute。这个类实现了IActionFilter和IResultFilter接口。ActionFilterAttribute有下面几个方法能够重写:
-
OnActionExecuting
在controller action运行之前调用
OnActionExecuted
在controller action运行之后调用
OnResultExecuting
在controller action result运行之前调用
OnResultExecuted
在controller action result运行之后调用
实现每一个页面都验证cookie中是否存实用户信息。过期用户信息就失效,跳转登录页面。
总体思路是这种:先在登录Controller中把页面传来的User信息保存到cookie中,设置cookie失效时间。每一个Controller中的方法运行都会先运行Filter。查看cookie中是否存实用户信息。
二、实践
首先要把username信息保存到cookie中。在登录的Controller中创建cookie。cookie是一种键值对模式(key, value)。
#region 将username存到cookie中 /// <summary> /// 保存Cookie /// </summary> /// <returns></returns> public void CreateCookie() //此Action自己主动往cookie里写入登录信息 { HttpCookie UserName = new HttpCookie("name"); UserName.Value = Request["userName"]; System.Web.HttpContext.Current.Response.SetCookie(UserName); //cookie保存时间 UserName.Expires = DateTime.Now.AddHours(10); } #endregion
其次,在Filter中创建自己定义的的LoginFilter,检查cookie是否实用户信息:
//类和方法都使用时,加上这个特性,此时都其作用,不加。仅仅方法起作用 [AttributeUsage(AttributeTargets.All, AllowMultiple = true, Inherited = true)] public class LoginFilter:ActionFilterAttribute { /// <summary> /// OnActionExecuting是Action运行前的操作 /// </summary> /// <param name="filterContext"></param> public override void OnActionExecuting(ActionExecutingContext filterContext) { //推断Cookieusernamepassword是否存在 HttpCookie cookieName = System.Web.HttpContext.Current.Request.Cookies.Get("name"); if ( cookieName == null) { filterContext.Result = new RedirectResult("/Login/Index"); } } }最后,要在每一个Controller中打下自己定义的Filter的标签
<span style="font-size:18px;"> [LoginFilter] public class HomeController : Controller { public ActionResult Index() { ViewBag.Message = "欢迎使用 ASP.NET MVC!"; return View(); } </span>在Controller上打了标签,下边的全部方法运行前都会先运行Filter,实现了过滤。可依据自己的业务。调整标签;或是使用全局的Global。
这次的Filter学习,暴露了我的一个缺点,调试bug,遇到红色波浪线就ctrl + z 撤销,而不是去认真的看问题,解决这个问题。自检!
- ASP.Net MVC Filter验证用户登录
- ASP.net MVC 中Security.FormsAuthentication验证用户的状态(匿名|已登录)
- asp.net mvc的Filter来验证Forms 判断是否登录,角色权限以及错误处理(转)
- Asp.net mvc验证用户登录之Forms实现-转
- ASP.NET MVC Filter- 登录验证 【异步刷新列表视图】
- Asp.net mvc验证用户登录之Forms实现
- Asp.net mvc验证用户登录之Forms实现详解
- ASP.NET MVC 使用Filter过滤器 验证用户登录状态
- ASP.net MVC 4 中Security.FormsAuthentication验证用户的状态(匿名|已登录)
- ASP.NET MVC5+MySql使用ASP.NET 身份验证实现用户和角色功能 1 概述 目标:使用MySql数据库,建立一个使用ASP.NET 身份验证的应用,并实现角色功能,身份
- asp.net -mvc框架复习(11)-基于三层架构与MVC实现完整的用户登录
- asp.net mvc 实现判断用户是否登录的两种方式
- Asp.Mvc 2.0用户登录实例讲解---(3)客户端验证
- Asp.Mvc 2.0用户登录实例讲解---(4)服务器端验证
- ASP.NET MVC 利用ActionFilterAttribute来判断用户是否登陆等等
- 在ASP.NET MVC中的四大筛选器(Filter)及验证实现
- ASP.NET MVC - 用户验证和权限验证
- ASP.NET MVC用户登录(Memcache存储用户登录信息)
- ASP.NET MVC - 用户验证和权限验证
- ASP.NET MVC下判断用户登录和授权状态方法