问题描述
在开发过程中,session过期是常见的,当session过期我们就能看到登录信息为null,这种问题最常见的处理方法就是判断session是否过期,如果过期跳转到登陆页面。这篇博客分享一下在easyUI和springmvc情况下如何配置。
SpringMVC拦截器配置
在SpringMVC中提供自定义拦截器的扩展,这时候就可以通过自定义完成对判断:
public class HandlerInterceptor1 extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (request.getHeader("x-requested-with") != null&& request.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")) response.setHeader("sessionstatus", "timeout");
response.getWriter().print("timeout");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("===========HandlerInterceptor1 postHandle");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("===========HandlerInterceptor1 afterCompletion");
}
}
完成拦截器配置
在springmvc中配置拦截器是用<mvc:interceptors>和
<mvc:interceptor>标签完成的,具体配置过程为
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*/*" />
<bean class="com.lenovo.lstp.mam.interceptor.HandlerInterceptor1" >
<property name="allowUrls">
<list>
<value>/login/login.do</value>
<value>/common/language.do</value>
</list>
</property>
</bean>
</mvc:interceptor>
</mvc:interceptors>
easyui设置全局JS完成跳转
在easyui前端添加一个全局的js完成判断和跳转功能,具体实现为:
$.ajaxSetup({
error: function (XMLHttpRequest, textStatus, errorThrown){
if(XMLHttpRequest.status==403){
alert('您没有权限访问此资源或进行此操作');
return false;
}
},
complete:function(XMLHttpRequest,textStatus){
var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus");
if(sessionstatus=='timeout'){
var top = getTopWinow();
alert('登录超时, 请重新登录.');
top.location.href=path+"/login.jsp";
}
}
});
结论
通过上面三个方面的配置即可完成session过期跳转相应页面。