前几个文章中介绍了一些关于MVC4.0的东东,今天我们来看一下登陆验证,也可以说是权限验证,即AuthorizeAttribute。这个可以使用在控制器Controller上,也可以使用在Action方法上面,这里最主要的是要介绍怎样将自己的权限验证进行扩展,以及禁止访问的页面转向问题。

下面我们先看一下代码,然后在进行分析,那样就可以事半功倍了,具体代码如下,当然还可以进行验证扩展,那就看你的需要了。

/// <summary>
     /// 权限验证属性。
     /// </summary>
     public class AuthorizeExAttribute : AuthorizeAttribute
     {
         /// <summary>
         /// 初始化权限验证类。
         /// </summary>
         /// <param name="permissionName">权限名称。</param>
         public AuthorizeExAttribute(string permissionName = "") {
             this.PermissionName = permissionName;
         }
         /// <summary>
         /// 获取权限名称。
         /// </summary>
         public string PermissionName { get; private set; }
 
         /// <summary>
         /// 验证授权。
         /// </summary>
         /// <param name="httpContext">HTTP 上下文,它封装有关单个 HTTP 请求的所有 HTTP 特定的信息。</param>
         /// <returns>如果用户已经过授权,则为 true;否则为 false。</returns>
         protected override bool AuthorizeCore(HttpContextBase httpContext)
         {
             if(httpContext == null)
                 return false;
             if(httpContext.User.Identity.IsAuthenticated)
             {
                 var user = Users.Current;
                 if(!user.IsAnonymous && IsAllow(user) && base.AuthorizeCore(httpContext))
                     return true;
             }
             httpContext.Response.StatusCode = 403;
             return false;
         }
 
         private bool IsAllow(User user)
         {
             //写上验证代码
             return true;
         }
 
         /// <summary>
         /// 重写验证。
         /// </summary>
         /// <param name="filterContext">验证信息上下文。</param>
         public override void OnAuthorization(AuthorizationContext filterContext)
         {
             base.OnAuthorization(filterContext);
             if(filterContext.HttpContext.Response.StatusCode == 403)
             {
                 if(filterContext.HttpContext.User.Identity.IsAuthenticated)
                     filterContext.Result = new RedirectResult("/AccessError");
                 else
                     filterContext.Result = new RedirectResult(FormsAuthentication.LoginUrl + "?returnUrl=" + filterContext.HttpContext.Request.UrlReferrer);
             }
         }

}

其中User是本人定义的一个用户实体类,而Users是这个实体类的方法类,这里就补贴出代码,可以自己实现下,因为各个的应用不同。知道了这个权限验证的权限名称,可以通过它来获取权限的值,那样就可以验证当前用户的这个权限是否通过验证。只需要重写他的代码,就可以实现验证了,为了能够告诉前端用户,提示禁止访问信息,这里设置了一个页面就是AccessError页面。

当然返回的页面也有不一样的,加入是匿名用户就需要让他登录,所以转向到登录页面,而如果是登录的用户就转向到禁止访问提示页面。这只是开发中需要验证的一个过滤器,在ASP.NET MVC开发中会使用到。

ASP.NET MVC 4.0改进:

笔者发现在MVC4.0后,微软加了一个AllowAnoumous的过滤器验证,即允许匿名用户访问,方法上的过滤器可以覆盖掉控制器上的标记。这样做有一个好处,因为很多地方都是需要登录后才可以访问的,但是像登录页面,注册页面这些又不需要登录。但是往往都会放在Account控制器中,这样可以方便验证。 由于要上班这里就不多说了,希望能够学到点东西,同时也给他人...

跟我一起学习ASP.NET 4.5 MVC4.0(四)(转)的更多相关文章

  1. 跟我一起学习ASP.NET 4.5 MVC4.0(二)

    上一篇文章中(跟我一起学习ASP.NET 4.5 MVC4.0(一))我们基础的了解了一下ASP.NET MVC4.0的一些比较简单的改变,主要是想对于MVC3.0来说的.因为这一些列主要是要给ASP ...

  2. 跟我一起学习ASP.NET 4.5 MVC4.0(一)

    跟我一起学习ASP.NET 4.5 MVC4.0(一)   由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最 ...

  3. 跟我一起学习ASP.NET 4.5 MVC4.0 (转)

    跟我一起学习ASP.NET 4.5 MVC4.0(一)   由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最 ...

  4. 跟我一起学习ASP.NET 4.5 MVC4.0(五)(转)

    前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...

  5. 跟我一起学习ASP.NET 4.5 MVC4.0(一)(转)

    由于上面一个项目使用的是ASP.NET4.0 MVC3.0,在招人的时候发现很多人有听说过MVC,但是却是没用过,对MVC也只是一知半解,最近想给团队成员做一个系统的解说,让大家都可以学习一下ASP. ...

  6. 跟我一起学习ASP.NET 4.5 MVC4.0(五)

    前面几篇文章介绍了一下ASP.NET MVC中的一些基础,今天我们一起来学习一下在ASP.NET MVC中控件的封装.在页面中我们会经常使用到Html对象,来程序控件,当然这里的控件不是说ASP.NE ...

  7. 跟我一起学习ASP.NET 4.5 MVC4.0(六)(转)

    这一系列文章跨度有点大,由于最近忙于其他事情,没有更新,今天重新安装了下Win8系统,VS2012和SQLServer 2012,顺便抽空继续一篇.随着VS2012 RC版本的放出,ASP.NET M ...

  8. 跟我一起学习ASP.NET 4.5 MVC4.0(三)(转)

    今天我们继续ASP.NET 4.5 MVC 4.0,前两天熟悉了MVC4.0在VS11和win8下的更新,以及MVC中的基础语法和几个关键字的使用.了解了这些就可以对MVC进一步认识,相信很多人都对M ...

  9. 跟我一起学习ASP.NET 4.5 MVC4.0(六)

    这一系列文章跨度有点大,由于最近忙于其他事情,没有更新,今天重新安装了下Win8系统,VS2012和SQLServer 2012,顺便抽空继续一篇.随着VS2012 RC版本的放出,ASP.NET M ...

随机推荐

  1. 【C#】工具类-FTP操作封装类FTPHelper

    转载:http://blog.csdn.net/gdjlc/article/details/11968477 using System; using System.Collections.Generi ...

  2. U8记账凭证修改方法汇总

    在输入记账凭证时,尽管账务系统提供了多种控制错误的措施,但错误凭证的出现是难免的,为此,系统必须能够提供对错误凭证修改的功能.目前,许多财 务软件(如:用友.安易.三门)都提供了“反审核.反记账.反结 ...

  3. python学习进阶一

    map()函数 def format_name(s): return s.capitalize() print map(format_name, ['adam', 'LISA', 'barT']) R ...

  4. linux 硬链接和软链接(转)

    1.Linux链接概念Linux链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln命令产生硬链接。 【硬连接】硬连接指通过索引节点 ...

  5. c# asp.net 鼠标改变控件坐标位置,更改控件坐标,注册表保存读取,打印,查找局域网内打印机等等收集

    界面虽然被我弄的很难看,但功能还可以 里边注册表的路径自己设置一下,或者加一个创建注册表的语句,不然会报错 前台: <%@ Page Language="C#" AutoEv ...

  6. CSS3 Animation 基于 less 构建的 css3 动画库

    LESS动画优点 · 快速开发css3动画 · 采用less mixins写法,不会生成冗余css · 已加入主流浏览器前缀,保证最大兼容性 · LESS-Animation 部分mixins支持传参 ...

  7. 使用SurfaceView和MediaPlayer实现视频做为背景

    场景:像我们在Uber应用开场,看到一一段视频作为開始.这样子让用户非常快投入应用使用的场景中去,这样的以视频作为开场的应用,我们是不是认为非常高大上呢,哈哈,事实上是使用了SerfaceView去载 ...

  8. Delphi和JAVA用UTF-8编码进行Socket通信例子

    最近的项目(Delphi开发),需要经常和java语言开发的系统进行数据交互(Socket通信方式),数据编码约定采用UTF-8编码. 令我无语的是:JAVA系统那边反映说,Delphi发的数据他们收 ...

  9. Circle-Progress-View

    https://github.com/jakob-grabner/Circle-Progress-View

  10. oc-20-多态

    /** 为什么父类可以访问子类继承自父类的方法,但是无法访问子类独有的方法? 1.编译器编译时: 编译器在编译时,只检查指针变量的类型,确定该指针变量类型里面有下面调用的方法,如果有该方法,编译器就认 ...