先描述一下场景: 在使用easyui的tab选项卡, 点击左边的菜单,右边会加载新的选项卡出来,点击左边的菜单是用ajax做的,携带jsp的名字请求后台返回页面数据,  但是整个框架是整合了shiro的,当你清除cookie的sessionid或者等等情况使session失效后,shiro会重定向到登录页面,但是ajax是无法处理302重定向的.

(大致原因解释一下:只是我自己的理解,可能有错误. 

    1:发起ajax请求

    2.后台返回302代码

    3.ajax回调函数暂停,

    4.处理重定向连接,后台返回200代码

    5.回调函数启动,接收200代码

    因此如果你在回调函数中通过判断302使用window函数重定向是无法实现的,ajax回调函数接收的始终是200-300之间的代码

)

,所以整体的逻辑是:

    1.点击菜单发起ajax请求,请求页面数据,

    2.后台判断当前用户是否在登录状态

    3.如果在登录状态,返回页面数据

    4.如果不在登录状态返回json数据,包括状态,重定向链接,失败信息等等

    5.前台接收数据,如果是页面数据,正常加载,如果是失败是数据,弹出提示信息,跳转登录页面

java 客户请求等待后端接口放回 请求接口返回302_java 客户请求等待后端接口放回

一直无法解决的问题:

    easyui的tab添加面板时是使用add方法进行处理.href进行页面数据加载,

    本人不是做前台的.easyui的框架js代码看不是太懂,最后还是翻了翻手册,发现tab继承自panle

然后发现panle有一个onLoadError函数,

java 客户请求等待后端接口放回 请求接口返回302_重定向_02

所以我在后台shiro认证到没有登录返回json数据时,将respons的状态改成302,然后add方法就会跳进onLoadError函数中,

在函数中进行json字符串解析和跳转就好了.

网上有好多解答方法,大致思路都是这样,通过json数据判断,或者在响应头中添加自定义数据进行页面跳转,

但是我由于使用easyui, 一反面函数无法自定义,另一方面后台返回的数据比较复杂,所以一直比较纠结如何解析返回的数据,判断返回的是页面还是失败的json信息.

现在通过onLoadError函数就可以解决了