最近在学ASP.NET MVC的权限认证的一些东西,上网搜索了一阵,发现网上的方法大多数是以下几类:

一、FormsAuthentication.SetAuthCookie(admin.Name, false)或者是FormsAuthenticationTicket

感受:感觉FormsAuthentication.SetAuthCookie这种方法重在检查是否有用户登录等,需要检查权限时,要调用this.User.Identity.IsAuthenticated方法来检查是否授权等,每次要检查权限时,都要进行权限检查,这类检查对于asp页面挺适用的,但是也挺麻烦的,还要配合web.config使用,我在网上看视频讲到这一块时,就觉得挺麻烦的,然后他又讲了可以用[Authorize]特性来代替这种麻烦的写法,于是我也尝试这样做,奇怪的是我直接加[Authorize]属性的时候,就算我登录了,它也是直接给我过滤掉了,并且是回到了Account/Login.aspx页面,这是我开始最不能理解的地方,因为我在web.config文件中配置了出错应该回到Home/Index.aspx页面啊,后来我想起MVC5中微软给带的自己的一套登录页面,并且在App_Start.cs文件夹Startup.Auth.cs文件中就将 LoginPath = new PathString("/Account/Login")给规定了,于是我将其改为自己的页面LoginPath = new PathString("/Home/Index"),虽然验证还是不同过,但是已经可以跳转回我自己的页面了,我就想是不是这个Startup.Auth.cs的设置比web.config文件中的设置高呢?我故意将web.config中验证权限不通过时地址与Startup.Auth.cs文件中设置的跳转地址不一致,但是运行我发现当权限不通过时,程序执行的依然是Startup.Auth.cs文件中的配置,我仔细查看了一下web.config文件,发现

<system.webServer>
<modules>
<remove name="FormsAuthentication" />
<remove name="ApplicationInsightsWebTracking" />
<add name="ApplicationInsightsWebTracking" type="Microsoft.ApplicationInsights.Web.ApplicationInsightsHttpModule, Microsoft.AI.Web" preCondition="managedHandler" />
</modules>
<validation validateIntegratedModeConfiguration="false" />
</system.webServer>

有这么一句,这意思是将配置文件中的Form验证给删除了吗?我将词句删除,然后重新尝试,发现程序执行了web.config文件配置的跳转信息。

   验证不通过时跳转问题解决了,那么我直接放上去权限认证[authorize]属性运行程序,发现我明明已经登陆了,可执行该方法时,还是给我跳转回了登录页面,我又仔细看了一下这个[authorize]属性,发现它也是检查cookie信息的,想要让它有值必须得在验证前,使用FormsAuthentication.SetAuthCookie(admin.Name, false)或者是FormsAuthenticationTicket对cookie进行设置保存才行,然后看视频源代码中做到这一步已经可以正常运行了,我的还得在web.config中添加

<system.web>
<authentication mode="Forms">
<forms loginUrl="~/Account/Login" timeout="1"/>
</authentication>
<authorization>
<allow users="*"/>
</authorization>

</system.web>

至于为什么,我以后再研究研究。

网上说FormsAuthenticationTicket可以对角色权限进行验证,我看了几篇帖子,写的都比较详细,抽机会得好好用用。

http://www.cnblogs.com/zhwl/archive/2011/02/23/1961924.html

http://www.cnblogs.com/colder/p/4544031.html

二、是重写继承于类AuthorizeAttribute的OnAuthorization和AuthorizeCore方法

三、重写AuthorizeCore和其对应的HandleUnauthorizedRequest方法的

感受:之前感觉直接在OnAuthorization中验证权限也可以啊,为什么非要在AuthorizeCore验证权限呢,在研究了一番之后感觉两者还是有分工的,执行OnAuthorization方法时,执行base.OnAuthorization(filterContext)这一句时,会调用AuthorizeCore,所以大概明白了,AuthorizeCore就是用来验证角色权限的,而OnAuthorization就是来处理权限验证逻辑的,比如通过验证怎么样, 不通过验证怎么样等等。但是又有一种说法是HandleUnauthorizedRequest方法才是处理OnAuthorizeCore中权限不通过的处理方法的啊,那么究竟是怎么样的呢,容我仔细研究一下再来!

http://www.cnblogs.com/wangjq/archive/2011/03/08/1977092.html

http://www.cnblogs.com/jyan/archive/2012/07/24/2606646.html:该文中写的好像很明确OnAuthorization方法是从数据库或者xml中获取用户角色信息的,然后交由AuthorizeCore进行角色权限判断,然后根据判断结果返回一个HttpUnauthorizedResult对象,然后由HandleUnauthorizedRequest方法去处理未通过认证的用户的跳转路由。

http://www.cnblogs.com/yushuo/p/4538031.html

四、重写OnActionExecuting

OnActionExecuting方法继承自ActionFilterAttribute,但ActionFilterAttribute和AuthorizeAttribute都继承自FilterAttribute。

如果用OnActionExecuting也写一个属性与AuthorizeAttribute重写的属性用在同一个action上,经过验证是AuthorizeAttribute先起作用,如果AuthorizeAttribute,AuthorizeCore,HandleUnauthorizedRequest都没有处理的话,OnActionExecuting重写的方法就起作用了。

后记:关于第二种和第三种方法,搞得也是迷迷糊糊,还有几种方法的参数各种上下文对象,AuthorizationContext,HttpContextBase,ActionExecutingContext让我看的一脸懵逼,找时间还得研究研究,毕竟纸上得来终觉浅,须知此事要躬行啊!

关于ASP.NET MVC的权限认证的一些总结的更多相关文章

  1. ASP.NET MVC 微信JS-SDK认证

    layout: post title: ASP.NET MVC 微信JS-SDK认证 category: .net date: 2016-11-01 00:00:00 tags: .net javas ...

  2. ASP.NET MVC通用权限管理系统(响应布局)源码更新介绍

    一.asp.net mvc 通用权限管理系统(响应布局)源码主要以下特点: AngelRM(Asp.net MVC)是基于asp.net(C#)MVC+前端bootstrap+ztree+lodash ...

  3. asp.net mvc 全局权限过滤器及继成权限方法

    全局权限过滤器 //----------------------------------------------------------------------- // <copyright f ...

  4. ASP.NET MVC实现权限控制

    这篇分享一下 ASP.NET MVC权限控制.也就是说某一用户登录之后,某一个用户是否有权限访问Controller,Action(操作),视图等 想实现这些功能,需要在数据库创建好几个表:[User ...

  5. (转)Asp.Net MVC中身份认证和授权

    MVC自带的ActionFilter 在Asp.Net WebForm的中要做到身份认证微软为我们提供了三种方式,其中最常用的就是我们的Form认证,需要配置相应的信息.例如下面的配置信息: < ...

  6. ASP.NET MVC +EasyUI 权限设计(二)环境搭建

    请注明转载地址:http://www.cnblogs.com/arhat 今天突然发现博客园出问题了,老魏使用了PC,手机,平板都访问博客园了,都是不能正常的访问,原因是不能加载CSS,也就是不能访问 ...

  7. ASP.NET MVC +EasyUI 权限设计(一)开篇

    在前一段时间中,老魏的确非常的忙碌,Blog基本上没有更新了,非常的抱歉,那么在后面的时间中,老魏会尽量的抽时间来写的,可能时间上就不太富裕了.今天开始呢,老魏会和大家分享一下关于权限设计的有关文章, ...

  8. 【转】ASP.NET MVC实现权限控制

    这篇分享一下 ASP.NET MVC权限控制.也就是说某一用户登录之后,某一个用户是否有权限访问Controller,Action(操作),视图等 想实现这些功能,需要在数据库创建好几个表:[User ...

  9. asp.net mvc的权限管理设计

    现在集中展示用户-角色-权限管理的功能,因此,所有数据表一律简化处理.   1 后台管理效果 (1)角色管理 (2)权限管理   2 数据库设计(MSSQL) (1)用户表dbo.Users 项 类型 ...

随机推荐

  1. git使用-分支管理

    1.查看分支 git branch 2.创建分支 git branch name 3.切换分支 git checkout name 4.合并分支上的内容到master分支 切换到master分支上 g ...

  2. adb-使用

    1.打印日志 adb logcat -v time > logname.txt adb logcat -v > logname.txt 2.删除手机缓存日志 adb logcat -c 3 ...

  3. Elasticsearch第四篇:索引别名、添加或修改映射规则

    项目中经常出现的问题,例如添加字段.修改字段,那原先的索引规则就要跟着改变,最好是一开始就给索引一个别名,修改字段时新增映射,然后将笔名指向新的映射,当然需要将之前的索引搬迁到新的映射当中. 1.获取 ...

  4. C#LeetCode刷题之#404-左叶子之和​​​​​​​​​​​​​​(Sum of Left Leaves)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4084 访问. 计算给定二叉树的所有左叶子之和. 3      / ...

  5. C#LeetCode刷题之#205-同构字符串(Isomorphic Strings)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3770 访问. 给定两个字符串 s 和 t,判断它们是否是同构的. ...

  6. 如何通过命令行简单的执行C程序

    如何通过命令行简单的执行C语言编写的程序 ​ 首先,我们知道C语言程序都是以xxx.c结尾的,这在Windows系统和Linux系统都是一样的.其次,C程序的执行过程为四步:预处理--编译--汇编-- ...

  7. Azure Command Line (一)入门

    一,引言 今天我们讲解一个新的 Azure 的知识,叫 “Azure Command Line”,简称 Azure CLI,具体概念是什么,我这里也不多说了,总结下来,Azure CLI 其实就是 用 ...

  8. ES7异步函数解决进程等待相关业务问题

    业务需求场景描述: 在接口只能单一检测的情况下,批量检测资源名称是否存在数据库,如果资源群中某一个资源已存在:给出交互让用户决定是否覆盖资源,最后形成不存在的资源和用户确定覆盖的资源群,进行提交. 业 ...

  9. centos7 + nginx+django 运行环境

    .easy_install和pip都是用来下载安装Python一个公共资源库PyPI的相关资源包的 首先安装easy_install 下载地址:https://pypi.python.org/pypi ...

  10. 《p5.js创意游戏编程》第一课:跳动的小球

    准备:Hbuilder/vscode等可以编写网页的编辑器 如果想立刻上手也可以使用在线编译器p5.js官方在线编辑器,如果打不开也可以使用国内的一款在线编辑器jsrun编辑器,(第一课先使用jsru ...