public RespondWebViewData <RespondOnlineSigninUserViewModel> GetOnlineSigninUserByUserID_g(RequestOnlineSigninUserViewModel request)
 {
     return(MemcacheHelper.Get(() =>
     {
         var parameter = new OnlineSigninUserParameter
         {
             SGuid = request.SGuid,
             UserIP = request.AddressIP
         };
         var dataModel = this.mSiginUserDataAccess.GetOnlineSigninUserByUserID_g(parameter);
         if (dataModel == null)
         {
             return new RespondWebViewData <RespondOnlineSigninUserViewModel>(WebViewErrorCode.LoginRequired);
         }
         return new RespondWebViewData <RespondOnlineSigninUserViewModel>
         {
             rows = new RespondOnlineSigninUserViewModel
             {
                 UserID = dataModel.userid,
                 LoginName = dataModel.username,
                 SGuid = dataModel.sguid,
                 ExpTime = dataModel.exptime,
                 UserIP = dataModel.userip
             }
         };
     }, string.Format(preCacheKey, "GetOnlineSigninUserByUserID_g"),
                               DateTime.Now.AddMinutes(WebConfigHelper.MemCachedExpTime()),
                               false,
                               request.SGuid,
                               request.AddressIP));
 }
        public RespondWebViewData <RespondSigninUserViewModel> FindSininUserDataModelByUserID(RequestOnlineSigninUserViewModel request)
        {
            var parameter = new OnlineSigninUserParameter
            {
                UserID = request.UserID
            };
            var dataModel = this.mSiginUserDataAccess.FindSininUserDataModelByUserID(parameter);

            if (dataModel == null)
            {
                return(new RespondWebViewData <RespondSigninUserViewModel>(WebViewErrorCode.NotExistUserInfo));
            }
            var companyInfoRequest = new RequestCompanyInfoViewModel
            {
                CompanyID = dataModel.comid
            };
            var companyInfo      = this.mCompanyInfoViewService.GetCompanyInfoViewModel(companyInfoRequest);
            var connectionConfig = new DbConnectionConfig
            {
                ConnectTimeout = companyInfo.ConnectTimeout,
                Database       = companyInfo.Database,
                Password       = companyInfo.Password,
                Server         = companyInfo.Server,
                UserID         = companyInfo.UserID
            };

            FormsAuthenticationTicketManage.RenewTicketIfOld(request.SGuid);
            var respond = new RespondWebViewData <RespondSigninUserViewModel>
            {
                rows = new RespondSigninUserViewModel
                {
                    CurrentUser = new SigninUser
                    {
                        CompanySerialNum = dataModel.comid,
                        UserID_g         = request.SGuid,
                        UserID           = dataModel.userid,
                        UserName         = dataModel.username,
                        AddressIP        = UserIPAddressTool.GetRealUserIPAddress(),
                        ConnectionConfig = connectionConfig,
                        IsManager        = dataModel.ismanager,
                        IsSystem         = dataModel.issystem
                    }
                }
            };

            HttpContext.Current.Items.Add(BeforeCompileConstDefined.HttpContext_Login_User, respond.rows.CurrentUser);
            return(respond);
        }
Пример #3
0
        protected void Application_AuthenticateRequest(object sender, EventArgs e)
        {
            var httpApplication = sender as HttpApplication;

            if (httpApplication == null)
            {
                return;
            }

            #region 跳过不需要恢复身份的页面的身份恢复操作

            var _notAuthenticatePageList = new List <string> {
                "/verifycodeimage/index", "/signin/login", "/commonpartial/unauthorizedvisit"
            };
            var _request_file_path = httpApplication.Context.Request.FilePath.ToLower();
            if (_notAuthenticatePageList.Any(item => item == _request_file_path))
            {
                return;
            }

            #endregion

            #region 身份未丢失的不需要执行恢复身份操作

            var context = httpApplication.Context;
            var user    = context.Items[BeforeCompileConstDefined.HttpContext_Login_User] as SigninUser;
            if (user != null)
            {
                return;
            }

            #endregion

            #region 设置需要使用主库连接字符串的页面

            var _useMainConnectionPageList = new List <string> {
                "/signin/login"
            };
            if (_useMainConnectionPageList.Any(item => item == _request_file_path))
            {
                context.Items[BeforeCompileConstDefined.HttpContext_Not_Use_Main_Connection] = false;
            }

            #endregion

            #region 身份恢复操作

            var autofac    = AutofacServiceContainer.CurrentServiceContainer.BeginLifetimeScope(new object());
            var service    = autofac.Resolve <ISigninUserViewService>();
            var userCookie = context.Request.Cookies[FormsAuthentication.FormsCookieName];
            if (userCookie == null)
            {
                return;
            }
            if (string.IsNullOrEmpty(userCookie.Value))
            {
                return;
            }
            try
            {
                var authenticationTicket = FormsAuthentication.Decrypt(userCookie.Value);
                if (authenticationTicket == null || authenticationTicket.Expired)
                {
                    return;
                }
                var userID_g = authenticationTicket.UserData;
                //if (!user.AddressIP.Equals(UserIPAddressTool.GetRealUserIPAddress())) return;
                var request = new RequestOnlineSigninUserViewModel
                {
                    SGuid     = userID_g.ToGuid(),
                    AddressIP = UserIPAddressTool.GetRealUserIPAddress()
                };
                var online = service.GetOnlineSigninUserByUserID_g(request);
                if (online == null)
                {
                    return;
                }
                service.FindSininUserDataModelByUserID(new RequestOnlineSigninUserViewModel
                {
                    SGuid  = online.rows.SGuid,
                    UserID = online.rows.UserID
                });
            }
            catch
            {
            }

            #endregion
        }