http://blog.csdn.net/try530/article/details/7782704

代码顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest

如果AuthorizeCore返回false时,才会走HandleUnauthorizedRequest 方法,并且Request.StausCode会返回401,401错误又对应了Web.config中

<authentication mode="Forms">
      <forms loginUrl="~/" timeout="2880" />
    </authentication>

所有,AuthorizeCore==false 时,会跳转到 web.config 中定义的  loginUrl="~/"

  1. public class CheckLoginAttribute : AuthorizeAttribute
  2. {
  3. protected override bool AuthorizeCore(HttpContextBase httpContext)
  4. {
  5. bool Pass = false;
  6. if (!CheckLogin.AdminLoginCheck())
  7. {
  8. httpContext.Response.StatusCode = 401;//无权限状态码
  9. Pass = false;
  10. }
  11. else
  12. {
  13. Pass = true;
  14. }
  15. return Pass;
  16. }
  17. protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
  18. {
  19. base.HandleUnauthorizedRequest(filterContext);
  20. if (filterContext.HttpContext.Response.StatusCode == 401)
  21. {
  22. filterContext.Result = new RedirectResult("/");
  23. }
  24. }
  25. }

AuthorizeAttribute的OnAuthorization方法内部调用了AuthorizeCore方法,这个方法是实现验证和授权逻辑的地方,如果这个方法返回true,

表示授权成功,如果返回false, 表示授权失败, 会给上下文设置一个HttpUnauthorizedResult,这个ActionResult执行的结果是向浏览器返回

一个401状态码(未授权),但是返回状态码没什么意思,通常是跳转到一个登录页面,可以重写AuthorizeAttribute的

HandleUnauthorizedRequest 

    1. protected override void HandleUnauthorizedRequest(AuthorizationContext context)
    2. {
    3. if (context == null)
    4. {
    5. throw new ArgumentNullException("filterContext");
    6. }
    7. else
    8. {
    9. string path = context.HttpContext.Request.Path;
    10. string strUrl = "/Account/LogOn?returnUrl={0}";
    11. context.HttpContext.Response.Redirect(string.Format(strUrl, HttpUtility.UrlEncode(path)), true);
    12. }
    13. }

MVC中使用AuthorizeAttribute做身份验证操作【转】的更多相关文章

  1. MVC中使用AuthorizeAttribute做身份验证操作

    代码顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest 如果AuthorizeCore返回false时,才会走H ...

  2. ASP.NET-AuthorizeAttribute做身份验证操作

    代码顺序为:OnAuthorization-->AuthorizeCore-->HandleUnauthorizedRequest 如果AuthorizeCore返回false时,才会走H ...

  3. 在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client

    在PHP应用中简化OAuth2.0身份验证集成:OAuth 2.0 Client   阅读目录 验证代码流程 Refreshing a Token Built-In Providers 这个包能够让你 ...

  4. ASP.NET MVC中对Model进行分步验证的解决方法

    原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个 ...

  5. ASP.NET MVC中利用AuthorizeAttribute实现访问身份是否合法以及Cookie过期问题的处理

    话说来到上海已经快半年了,时光如白驹过隙,稍微不注意,时间就溜走了,倒是没有那么忙碌,闲暇之际来博客园还是比较多的,记得上次在逛博问的时候看到有同志在问MVC中Cookie过期后如何作相关处理,他在阐 ...

  6. ASP.NET没有魔法——ASP.NET MVC使用Oauth2.0实现身份验证

    随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构).服务器与多种客户端的(如PC.移动.Web等),甚至还有需要以服务的 ...

  7. ASP.NET MVC使用Oauth2.0实现身份验证

    随着软件的不断发展,出现了更多的身份验证使用场景,除了典型的服务器与客户端之间的身份验证外还有,如服务与服务之间的(如微服务架构).服务器与多种客户端的(如PC.移动.Web等),甚至还有需要以服务的 ...

  8. Angular 应用中的登陆与身份验证

    Angular 经常会被用到后台和管理工具的开发,这两类都会需要对用户进行鉴权.而鉴权的第一步,就是进行身份验证.由于 Angular 是单页应用,会在一开始,就把大部分的资源加载到浏览器中,所以就更 ...

  9. 在ASP.NET Core 2.0中使用Facebook进行身份验证

    已经很久没有更新自己的技术博客了,自从上个月末来到天津之后把家安顿好,这个月月初开始找工作,由于以前是做.NET开发的,所以找的还是.NET工作,但是天津这边大多还是针对to B(企业)进行定制开发的 ...

随机推荐

  1. 杭电oj 1009 FatMouse' Trade

    Tips:本题采用贪心算法,类似于背包问题,关键在于读入数据之后,将数据按 J[i]/F[i] 从大到小排列即可. /**本程序主要采用贪心算法思想,类似于背包问题*/ #include<std ...

  2. php IP string与整型互换

    PHP中有内置函数ip2long可以将ip地址转换整型. 使用long2ip把整型转换回ip地址 例子: $ip = '58.6.207.207'; $ip_int = ip2long($ip); e ...

  3. Redmine开启服务

    写了一个启动Redmine的开机脚本,redmine文件在/etc/init.d/下 #!/bin/sh ### BEGIN INIT INFO # Provides: Dean Chen # Req ...

  4. shu_1186 字符排列问题

    cid=1079&pid=23">http://202.121.199.212/JudgeOnline/problem.php?cid=1079&pid=23 分析: ...

  5. swift基本用法-for循环遍历,遍历字典,循环生成数组

    // Playground - noun: a place where people can play import UIKit //--------------------------------- ...

  6. Elasticsearch的javaAPI之percolator

    Elasticsearch的javaAPI之percolator percolator同意一个在index中注冊queries,然后发送包括doc的请求,返回得到在index中注冊过的而且匹配doc的 ...

  7. 具体解释HTML中的window对象和document对象

    Window -- 代表浏览器中一个打开的窗体: 对象属性 window //窗体自身 window.self //引用本窗户window=window.self window.name //为窗体命 ...

  8. Format类及其子类功能和使用方法具体解释

    Format类及其子类功能和使用方法具体解释 1.   Format类结构: ·        java.lang.Object ·        java.text.Format ·         ...

  9. Ubuntu12.04下jamvm1.5.4+classpath-0.98成功执行 helloworld.class

    经过两天的努力,总于在ubuntu以下编译好classpath-0.98与jamvm1.5.4,并能成功的运行类文件:jamvm hellowold,当屏幕上打印出"hello world! ...

  10. 自动工作负载库(Automatic Workload Repository,AWR)

    自动工作负载库(Automatic Workload Repository,AWR)AWR的由来:    10g之前的oracle:用户的连接将产生会话,当前会话记录保存在v$session中:处于等 ...