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 并发性和多线程
    Java多线程整理
    线程死锁问题
    随机生成长度为len的密码,且包括大写、小写英文字母和数字
    ConcurrentHashMap原理分析
    并发 并行 同步 异步 多线程的区别
    Android与javaScript的交互
    Android6.0 新特性详解
    Android 6.0 新功能及主要 API 变更
    安装 Python-Client
  • 原文地址:https://www.cnblogs.com/childking/p/12761017.html
Copyright © 2011-2022 走看看