zoukankan      html  css  js  c++  java
  • .net中的身份认——AuthorizeAttribute

    1..net自己的AuthorizeAttribute类来实现用户身份验证

    AuthorizeAttribute类有两个重要的方法:AuthorizeCore和HandleUnauthorizedRequest。其中AuthorizeCore函数是用来判断一个请求是否通过用户验证,它的返回结果是一个bool。HandleUnauthorizedRequest函数则是在AuthorizeCore返回结果是false时会调用的函数。源代码如下所示:

    实例:

    复制代码
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false)]
        public class CheckAttribute : AuthorizeAttribute
        {
            #region Methods

            protected override bool AuthorizeCore(HttpContextBase context)
            {
                var cookie = HttpContext.Current.Request.Cookies["ctoken"];
                if (cookie != null && !string.IsNullOrEmpty(cookie.Value))
                {
                    var redis = new RedisService();
                    var r = redis.GetUser(cookie.Value);
                    if (r.Item1 && (string.IsNullOrEmpty(LoginSysUser.GetUserName()) || r.Item2 != LoginSysUser.GetUserName()))
                    {

                        var mUser = new UserService().FindByUserName(r.Item2);

                        new LoginSysUser()
                        {
                            Id = mUser.USERID.ToString(),
                            UserName = mUser.USERNAME,
                            Expires = DateTime.Now.AddMinutes(20)
                        }.Login();
                        return true;
                    }

                }
                var falg = !string.IsNullOrEmpty(LoginSysUser.GetId());
                if (!falg)
                    context.Response.StatusCode = 403;
                return falg;
            }

            protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
            {
                base.HandleUnauthorizedRequest(filterContext);
                if (filterContext.HttpContext.Response.StatusCode == 403)
                {
                    if (filterContext.HttpContext.Request.Url != null)
                    {
                        if (filterContext.HttpContext.Request.IsAjaxRequest())
                        {
                            var result = new JsonResult
                            {
                                Data = new
                                {
                                    Code = -1,
                                    Message = "请先登录!"
                                },
                                JsonRequestBehavior = JsonRequestBehavior.AllowGet
                            };
                            filterContext.Result = result;
                        }
                        else
                        {
                            filterContext.Result = new RedirectResult("~/Sys/Account/Login");
                        }
                    }
                }
            }

            #endregion Methods
        }
    复制代码

    2. 添加AuthorizeAttribute过滤

    我们自定义个AthorizeAttribute已经实现了,接下来就是在控制器上面实现了。具体实现方法有三种

    1、Controller层级添加

     2、Action层级添加

     3、全局添加(这个过滤器配置可以在Global.asax中看到)

    四、取消过滤

          有些页面,例如登录页面、登录请求的时候用户是肯定还没有登录的,这个时候如果我用了全局添加的话,用户岂不是永远无法登录了?那么为了使某些特定的方法可以不用验证过滤可以在特定Action、Controller上面添加以下抬头

     AllowAonymous表示一个特性,该特性用于标记在授权期间要跳过 System.Web.Mvc.AuthorizeAttribute 的控制器和操作

    漫思
  • 相关阅读:
    当接口请求体里的日期格式跟web页面日期格式不一致时,该如何处理呢?
    巧妙利用selenium中的JS操作来处理特殊的文本框
    web自动化针对PO模式进行二次封装之basepage
    基于python的selenium两种文件上传操作
    selenium三大切换的骚操作之显性等待
    基于python的selenium常用操作方法(2)
    基于python的selenium常用操作方法(1)
    selenium常用的三种等待方式
    使用suds模块进行封装,处理webservice类型的接口
    使用csv模块读写csv格式文件
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/15399088.html
Copyright © 2011-2022 走看看