最近在学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. 我是键盘侠-键盘流神器Vimium

    黑客的浏览器. Vimium本着Vim的精神为导航和控制提供键盘快捷键. 注意:谷歌不允许 Vimium在 Chrome Web Store页面和 新选项卡页面上运行.所以按键无效不要惊讶 Vimiu ...

  2. Hotspot GC研发工程师也许漏掉了一块逻辑

    本文来自: PerfMa技术社区 PerfMa(笨马网络)官网 概述 今天要说的这个问题,是我经常面试问的一个问题,只是和我之前排查过的场景有些区别,属于另外一种情况.也许我这里讲了这个之后,会成为不 ...

  3. jQuery 发布微博案例

    .box { width: 500px; height: 500px; border: 1px solid #efefef; margin: 0 auto; text-align: center; } ...

  4. C#LeetCode刷题-动态规划

    动态规划篇 # 题名 刷题 通过率 难度 5 最长回文子串   22.4% 中等 10 正则表达式匹配   18.8% 困难 32 最长有效括号   23.3% 困难 44 通配符匹配   17.7% ...

  5. C#LeetCode刷题之#447-回旋镖的数量(Number of Boomerangs)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3792 访问. 给定平面上 n 对不同的点,"回旋镖&q ...

  6. Webpack 定义process.env的时机

    定义 process.env的时机 如果已经提取了公共配置文件 webpack.common.js 分别定义了开发配置webpack.dev.js和生产配置webpack.prod.js 在webpa ...

  7. PowerJob 的自实现高可用方案,妙妙妙!

    本文适合有 Java 基础知识的人群 作者:HelloGitHub-Salieri HelloGitHub 推出的<讲解开源项目>系列. 碎碎念 高可用放到今天已经不是一个新颖的词汇了,怎 ...

  8. github渗透测试工具库[转载]

    前言 今天看到一个博客里有这个置顶的工具清单,但是发现这些都是很早以前就有文章发出来的,我爬下来后一直放在txt里吃土.这里一起放出来. 漏洞练习平台 WebGoat漏洞练习平台:https://gi ...

  9. Es6扩展运算符--三点运算符(...)--展开语法(Spread syntax)

    0.看文档呀 关于拓展运算符更详细的解释见 > MDN展开语法 关于剩余参数更详细的解释见 >MDN剩余参数 关于解构赋值更详细的解释见 >MDN解构赋值 直接看上面的文档更好 1. ...

  10. 实体类转xml

    看项目中需要实体类转xml,大家是拼接的.感觉可以利用反射实现.于是写了下 代码如下 package com.kevin.util; import org.springframework.util.O ...