关于easyui框架session问题,easyui用的是iframe 连接后在tab中显示 ,如果后台拦截器或过滤器判断session是否为空,此时登录页面并为完全跳出来而是在easyui框架中的tabs中显示,若想要它跳到登录界面 一句话即可,同样咋框架中还会出现ajax请求而不是像iframe一个普通页面连接跳转,ajax这种请求如果session为空页面不会有任何跳转好像无任何反应。
首先看待第一个问题如何将iframe 跳转到登录界面 后台代码如下:
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
String path=request.getServletContext().getContextPath();
if(request.getSession().getAttribute("operations")==null){
//判断是否是ajax请求
if (request.getHeader("x-requested-with") != null&& request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest"))//如果是ajax请求响应头会有,x-requested-with;
{
response.setHeader("sessionstatus", "timeout");//在响应头设置session状态
response.getWriter().print("timeout"); //打印一个返回值,
return false;
}else{
response.sendRedirect(path+"/sessionout.jsp");
return false;
}
}else{
return true;
}
}
编写一个sessoin.jsp页面 写上如下代码:
<script type="text/javascript">
//父窗口对象 中打开一个连接 连接到我们的登录界面 当页面跳转会自动执行下面的JavaScript代码
parent.window.location.href="maintainLogin.jsp";
</script>
当请求被拦截是首先会执行拦截器然后跳转到sessionout.jsp页面,执行JavaScript代码跳转到登录界面。
在看看ajax请求,首先通过$.ajaxSetup 设置全局ajax,编写一个公用的js将如下代码写入,每一个页面引入此js,ajax执行之前执行$.ajaxSetup
$.ajaxSetup({
error: function (XMLHttpRequest, textStatus, errorThrown){
if(XMLHttpRequest.status==403){
//
$.messager.alert('提示', '限制访问此资源或进行此操作','info');
return false;
}
},
complete:function(XMLHttpRequest,textStatus){
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通过XMLHttpRequest取得响应头,sessionstatus,
if(sessionstatus=='timeout'){
//如果超时就处理 ,指定要跳转的页面
parent.window.location.href="maintainLogin.jsp";
}
}
});
这样就实现了ajax请求未登录跳转到登录界面