zoukankan      html  css  js  c++  java
  • 解决由AJAX请求时forms认证实效的重新认证问题

    前言:

    当用AJAX请求一个资源时,服务器检查到认证过期,会重新返回302,通过HTTP抓包,是看到请求了登录页面的,但是JS是不会进行跳转到登录页面。

    使用环境:

    ASP.NET MVC 4

    JQUERY EASY UI

    待解决的问题

    1,如果AJAX请求时认证实效,那么跳转到登录页面重新认证,然后才能进行其它操作。(必须解决)

    2,在认证成功之后最好不要返回首页,然后用户又得重新进行进入刚才页面。

    解决方法

    后端

    添加一个自定义的AuthorizeAttribute

    实现原理:如果是AJAX请求,并且没有进行授权,那么就返回 HTTP 401,代码如下:

    Code

    前端

    如果想让所有页面都能捕获401错误,那么就需要在模版页_Layout.cshtml中用JS进行判,代码如下:

    Code

    虽然现在实现了认证。

    那么如何在登录页面认证成功之后自动把该窗口给关闭了?

    因为是用iframe嵌套的登录页面,所以这个属性很重要“parent”

    实现方式:

    1,在_Layout.cshtml中再加一个JS方法,用于登录成功后的回调函数,代码如下:

    Code

    2,在Controller中获取传过来的参数:
                ViewBag.AJAX_Login = Request.QueryString["AJAX_Login"];
    在VIEW中

    如果认证成功,就调用LoginSuccessCallBack方法关闭窗口,在重新获取刚才没有请求成功的数据。

    Code

    参考:

    http://www.cnblogs.com/dudu/p/3384234.html

    http://stackoverflow.com/questions/2472578/is-it-possible-to-use-redirecttoaction-inside-a-custom-authorizeattribute-clas/2472878#2472878

    http://stackoverflow.com/questions/2580596/how-do-you-handle-ajax-requests-when-user-is-not-authenticated

    http://stackoverflow.com/questions/7532261/ajax-and-formsauthentication-how-prevent-formsauthentication-overrides-http-401/7628655#7628655

  • 相关阅读:
    Tomcat工作原理
    刚刚大学毕业,自己搭网站遇到的问题 一:tomcat中同时部署两个项目的问题
    maven常用命令
    修改redis端口号
    assert的基本用法
    Linux下mysql新建账号及权限设置
    tomcat设置http自动跳转为https访问
    spring mvc 实现文件上传下载
    svn: E155004 is already locked 解决方案
    数据库连接池druid
  • 原文地址:https://www.cnblogs.com/jiguixin/p/3388179.html
Copyright © 2011-2022 走看看