Exemplo n.º 1
0
        public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            if (context == null)
            {
                throw new PrivilegeException((int)EnumPrivilegeException.请求上下文为空, "context is null");
            }
            if (next == null)
            {
                throw new ArgumentNullException(nameof(next));
            }
            //如果不是允许任意模式访问的接口
            if (!context.Filters.Any(item => item is IAllowAnonymousFilter))
            {
                var token = context.HttpContext.Request.Headers[Privilege_TOKEN];
                if (string.IsNullOrWhiteSpace(token))
                {
                    throw new PrivilegeException((int)EnumPrivilegeException.未查询到该身份, "token not found");
                }
                UserTokenDAL userTokenDAL = new UserTokenDAL();
                var          userToken    = await userTokenDAL.FindToken(token);

                if (userToken == null)
                {
                    throw new PrivilegeException((int)EnumPrivilegeException.用户身份令牌不存在, "token is error");
                }
                if (DateTime.Compare(userToken.Expiration_Time, DateTime.Now) <= 0)
                {
                    throw new PrivilegeException((int)EnumPrivilegeException.用户身份令牌过期, "token is expiration");
                }
                await next.Invoke();
            }
        }
        /// <summary>
        /// GetNewToken
        /// </summary>
        /// <param name="userFid"></param>
        /// <returns></returns>
        public string GetNewToken(Guid userFid)
        {
            ///TOKEN超时时间
            string userTokenExpireMinute = new ConfigDAL().GetValueByCode("USER_TOKEN_EXPIRE_MINUTE");

            if (!int.TryParse(userTokenExpireMinute, out int tokenExpireMinute))
            {
                tokenExpireMinute = 120;
            }
            ///获取有无未过期的TOKEN
            UserTokenInfo info = new UserTokenDAL().GetInfo(userFid);

            if (info == null)
            {
                info     = new UserTokenInfo();
                info.Fid = Guid.NewGuid();

                ///GUID去掉-
                info.Token = info.Fid.GetValueOrDefault().ToString().Replace("-", string.Empty);
                ///
                info.DisableDate = DateTime.Now.AddMinutes(tokenExpireMinute);
                info.CreateDate  = DateTime.Now;
                info.CreateUser  = "******";
                info.ValidFlag   = true;
                if (dal.Add(info) == 0)
                {
                    return(string.Empty);
                }
                return(info.Token);
            }
            ///
            dal.UpdateInfo("" +
                           "[DISABLE_DATE] = N'" + DateTime.Now.AddMinutes(tokenExpireMinute) + "'," +
                           "[MODIFY_DATE] = GETDATE()," +
                           "[MODIFY_USER] = N'#TOKEN_CREATER'",
                           info.Id);
            return(info.Token);
        }