`

spring security+extjs session超时解决方案

 
阅读更多

解决思路:

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>

 

分享到:
评论
1 楼 ron.luo 2017-06-18  
两种方法,哪种更有效呢?

相关推荐

    spring security3+extjs4项目(含数据库文件)

    Spring Security 3 和 ExtJS 4 是两个在Web开发领域广泛应用的技术栈,它们结合可以构建出强大且安全的用户界面。下面将详细讲解这两个技术及其在项目中的应用。 Spring Security 是一个为Java应用程序提供安全服务...

    spring+mvc+mybatis+extjs整合

    【标题】"spring+mvc+mybatis+extjs整合"是一个经典的Java Web开发框架组合,广泛应用于企业级应用。这个项目结合了Spring MVC作为控制层,MyBatis作为数据访问层,以及ExtJS作为前端展示层,构建了一个完整的三层...

    spring mvc +Extjs

    在现代Web开发中,Spring MVC和ExtJS是两个常见的技术,用于构建强大的后端和前端应用。本篇文章将深入探讨如何使用Spring MVC 3与ExtJS进行数据交互,特别是通过JSON格式来实现这一过程。 首先,Spring MVC 3引入...

    spring mvc+hibernate+extjs代码示例

    这是一个基于Spring MVC、Hibernate和ExtJS的Web应用示例,主要展示了如何整合这三个技术来构建一个功能完善的后台管理系统。下面将分别对这三个技术及其整合方式进行详细介绍。 **Spring MVC** Spring MVC是Spring...

    Spring.Net+NHibenate+Asp.Net mvc +ExtJs 项目实例

    Spring.Net+NHibenate+Asp.Net mvc +ExtJs 系列文档 包含 6 个文档,以及4个demo ,以及包含一个NMG-2.1Nhibernate生成工具,可以生成实体对应的实体类以及对应的.hbm.xml类. 案例来自&lt;博客园&gt;孤独侠客(似水流年) 的 ...

    easyjweb+jpa+spring+extjs续

    easyjweb+jpa+spring+extjs续:实现了综合配货系统后台管理,由于时间关系,有些细节没有考虑到,但是框架打气来,没有什么大问题,由于时间关系现在就更新到这,需要的请下载,认真学完现在更新的和以后更新的,项目...

    Spring+Hibernate+Extjs项目实例

    **Spring+Hibernate+Extjs项目实例详解** 在Java企业级应用开发中,Spring、Hibernate和Extjs这三种技术的组合非常常见,形成了所谓的"SSH+Extjs4"框架。这个项目实例是基于这些技术实现的一个典型应用,展示了如何...

    struts2+Hibernate3.3+spring2.5.6+extjs3.2 图书管理系统

    《基于Struts2+Hibernate3.3+Spring2.5.6+ExtJS3.2的图书管理系统详解》 在当今信息化社会,图书管理系统的构建是图书馆自动化、网络化的重要一环。本系统采用了一套经典的Java技术栈,即Struts2作为MVC框架、...

    spirngMVC+Hibernate+SpringSecuirty+Extjs一个简单的权限管理系统

    这是一个基于Spring MVC、Hibernate、Spring Security和ExtJS的权限管理系统实现。这个系统旨在提供一个基础的用户、角色和权限管理的解决方案,适用于小型到中型企业内部的后台管理需求。下面将详细阐述这些技术栈...

    struts+spring+ibatis+extjs完美整合!!!

    struts+spring+ibatis+extjs完美整合! 联系方式:QQ360310087 如果有需要与本人沟通的.

    spring+extjs项目文件

    3. Spring Security:集成Spring Security,可以提供用户认证和授权功能,保障系统安全。 4. Ajax通信:ExtJS通过Ajax与Spring后台进行通信,实现异步请求,提升用户体验。 四、人力资源管理系统实践 1. 用户管理:...

    DWR+extjs+spring+hibernate

    总结起来,"DWR+extjs+spring+hibernate"的组合是现代Web应用开发的一个强大工具集,它能够帮助开发者快速构建出交互性强、性能优异的企业级应用。通过深入理解和熟练掌握这四个技术,可以显著提升开发者的技能水平...

    Hibernate3.3.2+Spring2.5.5+Struts2.1.6+Extjs3.0.0

    ### Hibernate3.3.2+Spring2.5.5+Struts2.1.6+Extjs3.0.0_Annotations方式快速开发框架 #### 一、概述 本资料介绍了一个基于Hibernate 3.3.2、Spring 2.5.5、Struts 2.1.6和Extjs 3.0.0的技术栈实现的快速开发框架...

    Spring+JPA+ExtJs(Grid)

    标题“Spring+JPA+ExtJS(Grid)”涉及的是一个整合了Spring框架、Java Persistence API (JPA) 和ExtJS Grid的项目。这个项目的核心在于利用这些技术构建一个数据展示和管理的前端后端系统。 首先,Spring是企业级...

    struts2+hibernate3.2+spring2+extjs2.0

    【标题】"struts2+hibernate3.2+spring2+extjs2.0" 是一个典型的Java企业级应用开发组合,它整合了四个关键的技术栈:Struts2作为MVC框架,Hibernate作为对象关系映射(ORM)工具,Spring作为依赖注入(DI)和面向切...

    SpringMVC+Extjs4案例

    SpringMVC+ExtJS4案例是一个综合性的Web项目开发示例,主要展示了如何结合SpringMVC、Hibernate和ExtJS4来构建一个具有基础CRUD(创建、读取、更新、删除)功能的Web应用程序。该项目涉及到的技术栈是企业级开发中...

    Hibernate+Spring+Struts2+ExtJS开发CRUD功能

    Hibernate+Spring+Struts2+ExtJS开发CRUD功能

    Hibernate+Spring+Struts2+ExtJS整合开发实例

    "Hibernate+Spring+Struts2+ExtJS整合开发实例"就是一个典型的Java Web应用程序开发案例,它将四个关键组件结合在一起,以实现高效、模块化的后端和前端功能。 **Hibernate** 是一个流行的Java对象关系映射(ORM)...

    Hibernate+Spring+Struts2+ExtJS开发CRUD功能实例

    在IT行业中,构建Web应用程序是常见的任务,而“Hibernate+Spring+Struts2+ExtJS开发CRUD功能实例”提供了一个完整的解决方案,用于快速开发基于Java的Web应用,特别是涉及数据库操作的CRUD(创建、读取、更新、删除...

Global site tag (gtag.js) - Google Analytics