Esempio n. 1
0
        public virtual void OnActionExecuting(ActionExecutingContext context)
        {
            if (Consts.IsTesting)
            {
                return;
            }

            if (!(context.ActionDescriptor is ControllerActionDescriptor action))
            {
                return;
            }

            if (!(context.Controller is BaseController controller))
            {
                return;
            }

            //标记了[AllowAnonymous]的方法被Pass掉
            if (action.MethodInfo.CustomAttributes.Any(attr => typeof(AllowAnonymousAttribute).IsAssignableFrom(attr.AttributeType)))
            {
                return;
            }

            // 例外的方法不进行判断
            if (ExceptActions.Contains(controller.GetType().Name + "." + action.MethodInfo.Name))
            {
                return;
            }

            controller.Log = controller.Log ?? DefaultFilter.GetLogInfo(context);

            var token = context.HttpContext.Request.Headers["token"].FirstOrDefault();

            if (token == null)
            {
                token = context.HttpContext.Request.Query["token"];
            }
            if (String.IsNullOrEmpty(token))
            {
                context.Result         = new JsonResult(MSG.NotLogined);
                controller.Log.Message = MSG.NotLogined.Message;
            }
            else
            {
                var sessionProvider = Consts.ServiceProvider.GetService <SessionProvider>();
                var session         = sessionProvider.Get(token);
                if (session == null)
                {
                    context.Result         = new JsonResult(MSG.SessionExpired);
                    controller.Log.Message = MSG.SessionExpired.Message;
                }
            }
        }