簡體   English   中英

使用ActionFilters和會話處理Asp.net MVC頁面中的安全性

[英]Handling Security in Asp.net MVC pages with ActionFilters and sessions

我要求在用戶會話過期時顯示警報並重定向到登錄頁面。 實際上我已經創建了一個應用於控制器的Action過濾器,它會檢查會話是否過期,如果它重定向到登錄頁面,否則它會讓操作成功完成。

它工作正常但我的問題出現在我發出ajax請求時。 對於一個實例,我在視圖中有ajax.beginform,並且我已經在該acion方法上保存了代碼。 現在,假設用戶在會話過期時提交了表單,在保存方法運行之前,我的actionFilter被調用,因為我已經將它設置在控制器上,所以,從那里開始,重定向到登錄頁面。 但是我從控制器返回Json並且它沒有重定向。

我應該如何實施這些東西?

我的代碼是::::::::::::

對於每個控制器,我的Action Filter都以相同的方式定義,我只是要為一個控制器定義所以,假設下面是我的控制器。

[CheckSessions]
    public class MyController : Controller
    {
             public ActionResult Add(Model model)
        {
                 Insert code and returns 
                return Json(new { Msg = Message});
         }
    }

Action Filter is here
   public class CheckSessions: ActionFilterAttribute
    { 
public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
if (HttpContext.Current.Session["LoginSession"] == null && HttpContext.Current.Session["LoginSession"] == null)
            {
                HttpContext.Current.Response.Redirect("/LoginController/Login");
            }
}
}


In View Page:::
   @using (Ajax.BeginForm("Add", "MyController ", new AjaxOptions { OnSuccess = "MessageConfirmation" }))
            {
   Content goes here
}

<script>
Getting Response

    function MessageConfirmation(Json) {
        alert(Json.StatusCode);
if(Json.StatusCode==404)
{
 redirect to login
}
}
</script>

您無法為Ajax請求執行Response.Redirect

而是重定向您發送說明會話到期的響應文本/代碼,並使用window.location.href重定向

 public class CheckSessions: ActionFilterAttribute
 { 
   public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
      if (HttpContext.Current.Session["LoginSession"] == null && 
       HttpContext.Current.Session["LoginSession"] == null)
      {
           if(HttpContext.Current.Request.IsAjaxRequest())
            {
             HttpContext.Current.Response.StatusCode="401"; //Session Expired
            }
           else
            {
             HttpContext.Current.Response.Redirect("/Account/Login");
            }

       }
    }
  }

在Javascript / jQuery中檢查狀態代碼===“401”

選項1:

新的AjaxOptions {OnSuccess =“MessageConfirmation(data,status,xhr)”}

function MessageConfirmation(data,status,xhr){

 //check the status code from xhr
 window.location.href="/Account/Login";

}

方案2:全球化

$.ajax({
  statusCode: {
    401: function(xhr) {
      window.location.href="/Account/Login";
    }
  }

});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM