先描述一下场景: 在使用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.前台接收数据,如果是页面数据,正常加载,如果是失败是数据,弹出提示信息,跳转登录页面
一直无法解决的问题:
easyui的tab添加面板时是使用add方法进行处理.href进行页面数据加载,
本人不是做前台的.easyui的框架js代码看不是太懂,最后还是翻了翻手册,发现tab继承自panle
然后发现panle有一个onLoadError函数,
所以我在后台shiro认证到没有登录返回json数据时,将respons的状态改成302,然后add方法就会跳进onLoadError函数中,
在函数中进行json字符串解析和跳转就好了.
网上有好多解答方法,大致思路都是这样,通过json数据判断,或者在响应头中添加自定义数据进行页面跳转,
但是我由于使用easyui, 一反面函数无法自定义,另一方面后台返回的数据比较复杂,所以一直比较纠结如何解析返回的数据,判断返回的是页面还是失败的json信息.
现在通过onLoadError函数就可以解决了