`
kjkhi
  • 浏览: 184810 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

SSH+ExtJS项目,当session过期时跳转到登陆界面

阅读更多
由于ExtJS项目,在页面发送请求都是以Ajax这种形式的异步请求,所以当后台检测到session过期时,不能通过转发使客户端跳转到login页面。http://jayklin.iteye.com/blog/1039132

在web.xml配置的Filter、Servlet等都是按照顺序拦截的,项目使用Spring Security作为用户登陆权限管理,所以所有正常操作的过滤器,必须配置在Security过滤器之后。

项目实现思路,在Security过滤器之前加入两个过滤器,一个是Struts2过滤器,但这个过滤器只对一个指定请求起作用,如处理session过期的action请求。令一个是实现Filter接口的自定义过滤器,实现对当前请求session状态的检测,如发现session已经过期,通过sendRedirect把请求转发给前面那个指定的Struts2过滤器,之后经过自定义的全局拦截器(继承AbstractInterceptor),向客户端发送session过期的信息。通过js检测,如果session过期后跳转页面到登陆界面。

具体实现代码:首先是定义检查session状态的Filter,这里使用Spring Security实现用户验证,这样的session当没有过期时可以通过属性名字“SPRING_SECURITY_CONTEXT”获得SecurityContext实例,如
public class SessionTimeoutFilter implements Filter{

	
	public void destroy() {
		// TODO Auto-generated method stub
		
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest servletRequest = (HttpServletRequest)request;
		HttpServletResponse servletResponse = (HttpServletResponse)response;
		HttpSession session = servletRequest.getSession();
		
		String url = servletRequest.getRequestURI();
		String path = url.substring(url.lastIndexOf("/"));
		String[] s = path.split("_");
		if (url.indexOf(".")==-1 && s.length == 2) {
			SecurityContext securityContext = (SecurityContext)session.getAttribute("SPRING_SECURITY_CONTEXT");
			if (securityContext == null) {
				servletResponse.sendRedirect(servletRequest.getContextPath()+"/test_timeout");
			}else {
				chain.doFilter(request, response);
			}
		}else {
			chain.doFilter(request, response);
		}
		
	}

	public void init(FilterConfig filterConfig) throws ServletException {
		
	}

}

因为该Filter在web.xml中配置url-pattern通配符为“/*”,这样所有请求都会经过该Filter,但这里这需要检验ExtJS发出的"**_**"这样格式的Ajax请求,所以需要首先判断请求是否为Ajax请求;当securityContext == null时,说明session已经过期,这时跳转到test_timeout。
在web.xml中,在上面这个Filter之前加入一个url-pattern通配符为“test_timeout”的Struts过滤器,如web.xml:
	<filter>
		<filter-name>strutsForSessionTimeout</filter-name>
		<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>strutsForSessionTimeout</filter-name>
		<url-pattern>/test_timeout</url-pattern>
	</filter-mapping>
	
	<filter>
		<filter-name>SessionTimeoutFilter</filter-name>
		<filter-class>com.edward.SessionTimeoutFilter</filter-class>
	</filter>
	<filter-mapping>
	    <filter-name>SessionTimeoutFilter</filter-name>
	    <url-pattern>/*</url-pattern>
	</filter-mapping>
	
	<filter>
    	<filter-name>springSecurityFilterChain</filter-name>
    	<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
	</filter>

	<filter-mapping>
	    <filter-name>springSecurityFilterChain</filter-name>
	    <url-pattern>/*</url-pattern>
	</filter-mapping>


需要在session已过期的action请求响应前,向客户端发送session过期的信息,必须在Struts.xml文件中配置自定义的Interceptor,详情见:http://jayklin.iteye.com/blog/1039145

到目前为止,已经实现了后台检测session状态,之后在action响应之前向客户端发送session已经过期的信息,那么需要在ExtJS中获取这个信息,实现页面跳转。在ExtJS中有两种请求:一为Ext.Ajax.request,另一个为Ext.form.Action.submit。但是经过我的测试,这两种请求在请求完成之后都会触发Ext.Ajax的“requestcomplete”事件,那么就可以在这里做出判断,如:
		//session timeout
		Ext.Ajax.on('requestcomplete', function(conn, response, options, e){
			var s = response.responseText;
			if(s.indexOf("{timeout:",0) != -1){
	//			window.location.reload();
				window.location.href = "login.jsp?timeout=true";
			}
		});
分享到:
评论
3 楼 kjkhi 2012-08-30  
941雨後 写道
同楼上的  待拯救啊

2 楼 941雨後 2012-08-24  
同楼上的  待拯救啊
1 楼 fanfubao 2012-05-25  
博主有SSH2+Extjs+spring security的源码吗?我整合的好久,也没把spring security整合进去,总是有错,想看看你是怎么配置的。

相关推荐

    ssh+extjs项目代码

    最近自己动手做了一个后台使用...工程实现的功能很简单,就是用户登陆后,可以将笔记内容记录到系统里。后续可以通过日期或者内容进行查询和修改。 主要的练习点在 1 SSH框架的搭建和使用; 2 extjs组件化创建。

    SSH+Extjs框架

    SSH+ExtJS框架是Web应用开发中的一个常见组合,它结合了Struts2、Hibernate和Spring三大主流Java EE框架,并引入了ExtJS作为前端展示层技术。这个框架的使用大大提高了开发效率,提供了灵活的数据管理和用户界面交互...

    ssh+extjs4整合开发

    在SSH整合中,Hibernate负责将业务对象映射到数据库表,通过Session接口进行增删查改操作。使用Hibernate,开发者可以专注于业务逻辑,而不是数据库操作细节。 EXTJS4是一个强大的前端JavaScript库,专用于构建具有...

    SSH+ExtJs分页小例子

    在IT领域,SSH和ExtJS是两种常用的开发技术。SSH是指Spring、Struts和Hibernate三个开源框架的组合,常用于构建企业级Java Web应用。而ExtJS是一个强大的JavaScript库,用于构建用户界面,特别是数据驱动的富客户端...

    ssh+extjs全注解的上传、分页、验证码的demo

    SSH+EXTJS是一种常见的Web开发框架组合,其中SSH代表Struts2、Hibernate和Spring,而EXTJS是一个前端JavaScript框架。这个“ssh+extjs全注解的上传、分页、验证码的demo”提供了如何在SSH后端框架基础上,结合EXTJS...

    ssh+extjs+mysql整合

    在"ssh+extjs+mysql整合"中,我们将SSH框架与ExtJS前端技术和MySQL数据库结合起来,构建一个完整的Web应用。以下是对这个整合过程的详细说明: 1. **Spring**:Spring作为核心框架,负责管理应用程序的各个组件,...

    ssh+extjs 小项目

    struts2+spring+hibernate整合(ssh+extjs整合)小项目“VIP消费查询系统”源码(源码+系统设计文档+建表语句+所有jar包)。该项目包含以下功能: 登录:本系统为商场VIP消费情况查询系统,具有一定的保密性。因此必须...

    SSH+ExtJs的demo完全实现

    本demo完全实现了SSH和ExtJS的集成,提供了从前端用户界面到后端数据处理的完整解决方案。 **Spring框架**是核心的依赖注入(DI)和面向切面编程(AOP)框架,负责管理应用中的对象和组件。在本demo中,Spring可能...

    SSH+EXTJS页面图书管理系统

    SSH+EXTJS页面图书管理系统SSH+EXTJS页面图书管理系统SSH+EXTJS页面图书管理系统SSH+EXTJS页面图书管理系统SSH+EXTJS页面图书管理系统SSH+EXTJS页面图书管理系统SSH+EXTJS页面图书管理系统

    SSH+Extjs开发视频教程-基于SSH+Maven+Extjs4+MySQL技术实战开发CRM客.doc

    SSH+Extjs开发视频教程-基于SSH+Maven+Extjs4+MySQL技术实战开发CRM客.doc

    ssh+extjs简单项目 spring定时任务

    在这个项目中,SSH用于后端业务逻辑处理和数据管理,而ExtJS则负责构建富客户端界面,Spring的定时任务模块(Spring Task)用于实现后台定时执行的任务。 首先,SSH(Spring、Struts2、Hibernate)是经典的Java EE...

    ssh+extjs项目jar包

    SSH+ExtJS项目中的jar包是Java开发中的关键组件,它们包含了实现特定功能的类库。SSH是指Spring、Struts和Hibernate三个开源框架的组合,而ExtJS则是一个用于构建富客户端Web应用的JavaScript框架。这里我们将深入...

    ssh+extjs4小项目

    标题中的“ssh+extjs4小项目”指的是一个基于SSH框架和ExtJS 4的轻量级Web应用程序。SSH是Spring、Struts2和Hibernate三个开源框架的组合,它们在Java Web开发中广泛使用,提供了模型-视图-控制器(MVC)架构的支持...

    SSH+EXTJS4

    SSH+EXTJS4 的一个模块实现,使用的是mysql数据库,sql文件在文件夹里面

    采用ssh+Extjs3.0实例框架luogou项目

    当SSH与ExtJS结合时,可以创建出交互性极强、用户体验优秀的Web应用。 在“采用ssh+Extjs3.0实例框架luogou项目”中,我们主要探讨以下几个关键知识点: 1. **Spring框架**:作为基础架构层,Spring提供了依赖注入...

    SSH+Extjs Oa管理系统整合

    SSH+Extjs Oa管理系统整合是一项复杂而关键的IT任务,涉及到多个技术栈的集成,主要包括Struts、Spring和Hibernate这三个Java EE框架,以及Extjs前端框架。在这样的系统中,SSH负责后端业务逻辑处理和数据管理,而...

    ssh+extjs+json

    【SSH+EXTJS+JSON】组合是开发Web应用程序的一种常见技术栈。SSH指的是Spring、Struts2和Hibernate三个开源框架的首字母缩写,EXTJS则是一个JavaScript库,用于构建富客户端应用程序,而JSON(JavaScript Object ...

    SSH+ExtJS.rar

    标题“SSH+ExtJS.rar”所指的,是将两种技术——Secure Shell (SSH) 和 Extensible JavaScript (ExtJS) 结合使用的项目压缩包。这个压缩包可能包含了一个使用SSH和ExtJS构建的Web应用程序的源代码和其他相关资源。 ...

    SSH + EXTJS_管理系统

    这个项目结合了后端强大的SSH框架和EXTJS的丰富交互界面,旨在提供一个高效、易用的企业级管理平台。 SSH框架详解: 1. Struts2:这是一个基于MVC设计模式的Web应用框架,它简化了开发过程,通过Action和Result来...

    ssh + extjs 4登录的小例子(前后台代码)

    ssh + extjs 4登录的小例子(前后台代码)

Global site tag (gtag.js) - Google Analytics