使用ActionFilters和会话处理Asp.net MVC页面中的安全性



我有一个要求,当用户的会话过期时,显示一个警报,并重定向到登录页面。事实上,我已经创建了一个应用于控制器的Action过滤器,它会检查如果会话已过期,如果是es,它将重定向到登录页,否则它将完成操作成功地

它工作得很好,但当我发出ajax请求时,问题就出现了。举个例子,我的视图中有一个ajax.beginfo,我已经在该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:

new AjaxOptions{OnSuccess="MessageConfirmation(data,status,xhr)"}

函数MessageConfirmation(数据、状态、xhr){

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

}

选项2:进行全局

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

});

相关内容

  • 没有找到相关文章

最新更新