加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何正确处理Ajax调用的登录过期?

发布时间:2020-12-16 01:35:31 所属栏目:百科 来源:网络整理
导读:我的Web应用程序由对服务器端RESTful API的大量Ajax调用组成.每次客户登录我的网站时,登录页面将从服务器获取一个JWT( JSON Web令牌)令牌,并将其作为客户端的cookie存储. (我选择将其存储为cookie,因为它是让浏览器自动发送的唯一方式,它比 HTML5 Web Storag
我的Web应用程序由对服务器端RESTful API的大量Ajax调用组成.每次客户登录我的网站时,登录页面将从服务器获取一个JWT( JSON Web令牌)令牌,并将其作为客户端的cookie存储. (我选择将其存储为cookie,因为它是让浏览器自动发送的唯一方式,它比 HTML5 Web Storage更安全).令牌中有一个字段描述令牌的到期日期.对于每个Ajax调用,令牌将一起发送以进行身份??验证.

如果客户端长时间停留在我的网页上,令牌可能会过期.当客户端进行下一个HTTP请求(不仅仅是REST调用)时,服务器将检测它.我使用一个servlet过滤器拦截所有的HTTP请求并检查令牌到期.如果令牌过期,将发送重定向到登录页面的响应.

但是,上述方法存在一个问题:“如何在客户端正常处理重定向到登录页面的响应?”

>对于非Ajax发起的HTTP请求,我可以依靠浏览器来处理重定向到登录页面的响应,并使页面自动跳转.
>对于Ajax发起的HTTP请求,似乎我需要为每个ajax调用的完成处理程序添加额外的逻辑,以检测重定向到登录页面的响应,并强制使页面跳转.

还是我错了?

一些参考:

JWT (JSON Web Token) automatic prolongation of expiration

Which authentication strategy should I use for my API?

Implicit & Explicit authentication

地址1:

看来浏览器将会透明地处理302重定向.所以也许我可以只返回一个302重定向到登录页面,无论是ajax调用还是纯页面访问.我会稍后再试

从here:

If the response is an HTTP redirect (status code 301,302,303 or
307),then it MUST be transparently followed (unless it violates
security or infinite loop precautions). Any other error (including a
401) MUST cause the object to use that error page as the response.

Catching 302 FOUND in JavaScript

How to manage a redirect request after a jQuery Ajax call

正是由于这个原因,web API不应该用302重定向来响应,而是在令牌已过期时有401未授权.

Web应用程序应该返回302个响应,因为它们总是被浏览器像代理人一样使用.更多信息,请参见my answer here.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读