Example #1
0
        public async Task OnAuthorizationAsync(AuthorizationFilterContext context)
        {
            bool isAnonymous = context.ActionDescriptor.HasAttribute <AllowAnonymousAttribute>();

            if (isAnonymous)
            {
                return;
            }

            var  userInfo  = context.HttpContext.Session.Get <LoginUserContext>(CommonStrings.COMMON_INFO_IN_SESSION);
            bool isNoCheck = context.ActionDescriptor.HasAttribute <NoCheckPasswordExpiredAttribute>();

            if (userInfo?.PasswordExpired == true && !isNoCheck)
            {
                logger.Info("パスワードの有効期限切れ。パスワード変更画面に遷移します。");
                string passwordChangeUrl = new PathString("/K0030_ChangePassword/Index");

                //パスワードの有効期限が切れている場合は、パスワード変更画面にしかいけない。
                if (context.HttpContext.Request.IsAjaxRequest())
                {
                    context.HttpContext.Response.StatusCode = StatusCodes.Status401Unauthorized;
                    context.Result = WebUtil.JsonContent(AjaxResult.CreateRedirectResult(passwordChangeUrl));
                }
                else
                {
                    context.Result = new RedirectResult(passwordChangeUrl);
                }
            }
        }
Example #2
0
        /// <summary>
        /// 各Actionメソッドから例外がthrowされた際に呼び出される。
        /// </summary>
        /// <param name="context"></param>
        public void OnException(ExceptionContext context)
        {
            if (context.ExceptionHandled)
            {
                return; //他の例外で処理済なら何もしない。
            }
            context.ExceptionHandled = true;

            Exception ex = context.Exception;

            logger.Error("エラーが発生しました。", LogType.Exception, ex: ex);

            string message = (ex as CustomException)?.Message ?? "エラーが発生しました。";

            _ = sendGridHelper.SendMessage("【執務管理システム】 エラーが発生しました。", ex.ToString());

            //Ajaxもしくはformアプリからのリクエストの場合はJsonを返す。
            if (context.HttpContext.Request.IsApiOrAjaxRequest())
            {
                //Ajaxリクエストに対するresult。
                context.Result = WebUtil.JsonString(RequestResult.CreateErrorResult(message));
            }
            else if (StreamRequestAttribute.IsStreamFileRequest((context.ActionDescriptor as ControllerActionDescriptor)?.MethodInfo))
            {
                //Streamリクエストに対するresult。
                //とりあえずJsonと一緒。
                context.Result = WebUtil.JsonContent(RequestResult.CreateErrorResult(message));
            }
            else
            {
                ViewResult errorPageResult = new ViewResult()
                {
                    ViewName = ErrorViewName, //デフォルトでViews\SharedのError.cshtmlが呼ばれる。
                    TempData = tempDataDictionaryFactory.GetTempData(context.HttpContext)
                };
                if (!string.IsNullOrEmpty(message))
                {
                    errorPageResult.ViewData = new ViewDataDictionary(modelMetadataProvider, context.ModelState);
                    errorPageResult.ViewData["ERROR_KEY"] = message;
                }
                context.Result = errorPageResult;
            }
        }