ASP.Net MVC Filter验证用户登录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ASP.Net MVC Filter验证用户登录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2741字,纯文字阅读大概需要4分钟。
内容图文
![ASP.Net MVC Filter验证用户登录](/upload/InfoBanner/zyjiaocheng/1163/6364591239f14697824b440504069ef4.jpg)
一、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中是否存有用户信息。
二、实践
首先要把用户名信息保存到cookie中,在登录的Controller中创建cookie。cookie是一种键值对模式(key, value)。
#region 将用户名存到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) { //判断Cookie用户名密码是否存在 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 撤销,而不是去认真的看问题,解决问题。自检!
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/u010096526/article/details/46700581
内容总结
以上是互联网集市为您收集整理的ASP.Net MVC Filter验证用户登录全部内容,希望文章能够帮你解决ASP.Net MVC Filter验证用户登录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。