zoukankan      html  css  js  c++  java
  • C# MVC 中自定义权限特性[Authorize]中对于Ajax访问的处理

    在MVC中定义自己的权限特性。

    下例中是简单的登录判断,登录信息存与Session中,如果Session中没有登录信息,那么就不通过。

    在处理无权限的时候,判断当前请求是否为Ajax请求,如果是Ajax请求,返回Json {state=-1,msg="请登录"},如过不是Ajax请求那么就直接重定向到登录页面。

    /// <summary>
    /// 授权特性
    /// </summary>
    public class MyAuthorizeAttribute : AuthorizeAttribute
    {
        string errcode = null;
    
        /// <summary>
        /// 授权核心
        /// </summary>
        /// <param name="httpContext"></param>
        /// <returns></returns>
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            var loginInfo = httpContext.Session["login"];
            if (loginInfo == null)
            {
                errcode = "NotLoggedIn";
                return false;
            }
            // 登录用户信息
            UserIdentity userIdentity = new UserIdentity((AdminInfo)loginInfo);
            httpContext.User = new UserPrincipal(userIdentity);
    
            return true;
        }
    
        /// <summary>
        /// 处理无权限请求
        /// </summary>
        /// <param name="filterContext"></param>
        protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            // 没有登录
            if (errcode == "NotLoggedIn")
            {
                if (filterContext.HttpContext.Request.IsAjaxRequest())
                {
                    filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;
                    filterContext.Result = new JsonResult
                    {
                        ContentEncoding = System.Text.Encoding.UTF8,
                        ContentType = "application/json",
                        JsonRequestBehavior = JsonRequestBehavior.AllowGet,
                        Data = new { state = -1, msg = "请重新登录" },
                    };
                }
                else
                {
                    filterContext.Result = new RedirectResult("/Account/Login");
                }
            }
            return;
        }
    }
  • 相关阅读:
    杂篇章
    敲代码中遇到的小问题
    数组的运用
    java中强大的免费的集成开发环境(IDE)eclipse的使用技巧及注意事项
    流程
    博客目录
    pgk
    gogs
    github相关
    axios记录
  • 原文地址:https://www.cnblogs.com/childking/p/12761017.html
Copyright © 2011-2022 走看看