解决思路:
1. 后台添加拦截器,判断session是否过期,过期返回一个标识。
2. 前台捕获到这个请求返回的值,最好在一个统一的地方捕获。一般选择Ext.Ajax的requestcomplete或者requestexception事件。
后来发现spring security原来有sessiontimeout配置的地方,当session超时时,会自动触发。
解决代码:
1. web.xml文件中加入
<session-config> <session-timeout>1</session-timeout> </session-config>
这个是配置session的过期的时间,单位是分钟,必须是整数。这里设置1分钟,方便测试
2. spring-config-security.xml文件中配置session超时的触发函数
<sec:session-management invalid-session-url="/sessiontimeout.do" ></sec:session-management>
这里可以直接配置invalid-session-url="/login.jsp",这里我配置了一个处理函数,因为要解决异步处理的情况
3.编写超时处理函数
@RequestMapping("/sessiontimeout.do") public void sessionTimeout(HttpServletRequest request,HttpServletResponse response) throws IOException { String requestUrl = request.getRequestURI(); if (request.getHeader("x-requested-with") != null && request.getHeader("x-requested-with").equalsIgnoreCase( "XMLHttpRequest")) { // ajax 超时处理 response.setHeader("sessionstatus", "timeout"); PrintWriter out = response.getWriter(); out.print("{timeout:true}"); out.flush(); out.close(); }else { // http 超时处理 response.sendRedirect(request.getContextPath() + "/login.do"); } }
4. 前台统一监听处理函数
Ext.Ajax.on('requestcomplete',function(conn, response, options, eOpts){ if(response.getResponseHeader("sessionstatus")=='timeout'){ alert("登入超时,系统将自动跳转到登陆页面,请重新登入!"); window.location = __ctxPath + "/login.do"; //如重定向到登陆页面 } });
参考文献:
http://blog.csdn.net/fly2749/article/details/8702855
http://yxkelsey.iteye.com/blog/618129
http://blog.csdn.net/awe5566/article/details/10201671
后续:
1.spring-mvc异常处理拦截器
public class SessionTimeoutInterceptor implements HandlerInterceptor { private List<String> allowUrls; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String requestUrl = request.getRequestURI(); /** * 对所有的请求,*.f进行拦截 */ if(requestUrl.indexOf(".f")!=-1){ /** * 登录页login.do不进行拦截 */ for(String url : allowUrls) { if(requestUrl.endsWith(url)) { return true; } } Object obj = request.getSession().getServletContext().getAttribute("user"); if(obj != null) { return true; }else { response.setHeader("sessionstatus", "timeout"); return false; } }else{ return true; } } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } public List<String> getAllowUrls() { return allowUrls; } public void setAllowUrls(List<String> allowUrls) { this.allowUrls = allowUrls; } }
2.拦截器配置
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/*/*" /> <bean class="*.SessionTimeoutInterceptor" > <property name="allowUrls"> <list> <value>/login.do</value> </list> </property> </bean> </mvc:interceptor> </mvc:interceptors> <!-- exception handler 统一异常处理--> <bean id="handlerExceptionResolver" class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver" > <property name="exceptionMappings"> <props> <prop key="*.CustomeException">redirect:/sessiontimeout.do</prop> </props> </property> </bean>
相关推荐
spring security3+extjs4项目(含数据库文件)
spring mvc+hibernate+extjs代码示例 请将数据库脚本在oracle数据库中执行后 直接运行该程序
spring+mvc+mybatis+extjs整合 内含mysql数据库,很适合新手借鉴
Struts2+Spring+Hibernate+ExtJS开发CRUD功能
extjs跟Spring mvc3中的数据交互,依然用的是JSON
struts2+Hibernate3.3+spring2.5.6+extjs3.2 图书管理系统
Hibernate+Spring+Struts2+ExtJS开发CRUD功能Hibernate+Spring+Struts2+ExtJS开发CRUD功能Hibernate+Spring+Struts2+ExtJS开发CRUD功能Hibernate+Spring+Struts2+ExtJS开发CRUD功能Hibernate+Spring+Struts2+ExtJS...
Hibernate3.3.2+Spring2.5.5+Struts2.1.6+Extjs3.0.0_Annotations方式快速开发框架资料。
Struts2.1.6+Hibernate3.3.2+Spring2.5.5+Extjs3.0.0+Annotations,整合开发。
web开发常用的jar包,struts2.1.8+Hibernate3.3+spring2.5.6+extjs3.2的jar包
Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列文档 包含 6 个文档,以及4个demo ,以及包含一个NMG-2.1Nhibernate生成工具,可以生成实体对应的实体类以及对应的.hbm.xml类. 案例来自<博客园>孤独侠客(似水流年) 的 ...
Hibernate+Spring+Struts2+ExtJS开发CRUD功能.docHibernate+Spring+Struts2+ExtJS开发CRUD功能.docHibernate+Spring+Struts2+ExtJS开发CRUD功能.docHibernate+Spring+Struts2+ExtJS开发CRUD功能.doc
spirngMVC+Hibernate+SpringSecuirty+Extjs一个简单的权限管理系统,开发工具是idea,数据库mysql,sql文件已经在压缩包中。
easyjweb+jpa+spring+extjs续:实现了综合配货系统后台管理,由于时间关系,有些细节没有考虑到,但是框架打气来,没有什么大问题,由于时间关系现在就更新到这,需要的请下载,认真学完现在更新的和以后更新的,项目...
Struts+Spring+Hibernate+ExtJs毕业系统
struts2.1.8+Hibernate3.3+spring2.5.6+extjs3.2+jbpm4.1版图书管理系统(原创) 工作之余没事写的。
Struts2(json-plugin) + Spring2 + ExtJS2.2 开源网络硬盘系统
spring3+ibaits3+struts2.18+Extjs3整合增删查改
struts2.1.8+Hibernate3.3+spring2.5.6+extjs3.2版图书管理系统(完整原创)
利用当今流行的extjs框架,加下,struts2+spring+ibatis+extjs做的一个小型应用系统