ext关于session失效的处理


其实对于ext处理session失效其实也很简单,就是写一个过滤器。过滤器的写法其实也很简单,首先实现javax.servlet.Filter接口,重写Filter中的init(FilterConfig config),doFilter(ServletRequest request, ServletResponse response, FilterChain chain), destroy()。相信大家看方法的名字便能知道这些方法的用处。其中过滤器的核心代码是在doFilter()方法中,在doFilter()方法中将过滤你的请求,下面给出我的doFilter()代码:

public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		String contextPath = ((HttpServletRequest) request).getContextPath();		//拿出全文路径
		String requestUri = ((HttpServletRequest) request).getRequestURI();		//取得请求路径
		String appurl = requestUri.replaceFirst(contextPath, "");
		this.logger.info("UrlFilter.doFilter:appurl =" + appurl);
		if(this.contains(appurl)){
			chain.doFilter(request, response);
		} else {
			HttpSession session = ((HttpServletRequest) request).getSession();
			if(session.getAttribute(RoleConstants.USER) != null){
				chain.doFilter(request, response);
			} else {
				 String ajaxTag = ((HttpServletRequest) request).getHeader("Request-By");//Ext  
	             if(ajaxTag == null || !ajaxTag.trim().equalsIgnoreCase("Ext")){  
			    	 ((HttpServletResponse)response).sendRedirect("timeout.jsp");  
			     }else{  
			    	 ((HttpServletResponse)response).addHeader("sessionstatus", "timeout");   
			         Map<String, Object> result = new HashMap<String, Object>();  
			         result.put("success", false);  
			         result.put("timeout",true);  
			         result.put("redirectUri", "timeout.jsp");  
			         PrintWriter out = ((HttpServletResponse)response).getWriter();  
			         
			         out.print(JSONArray.fromObject(result));  
			         out.flush();  
			         out.close();  
			     }
				//((HttpServletResponse)response).sendRedirect("login.html");
			}
		}
	}
各位可以根据个人需求重写方法内容。
当Filter写好后便在web.xml中配置需要过滤的路径,配置如下:
<filter>
		<filter-name>UrlFilter</filter-name>
		<filter-class>
			com.pas.action.UrlFilter
		</filter-class>
	</filter>
	
	<filter-mapping>
		<filter-name>UrlFilter</filter-name>
		<url-pattern>*.action</url-pattern>
	</filter-mapping>
	
	<filter-mapping>
		<filter-name>UrlFilter</filter-name>
		<url-pattern>*.html</url-pattern>
	</filter-mapping>
	<filter-mapping>
		<filter-name>UrlFilter</filter-name>
		<url-pattern>*.jsp</url-pattern>
	</filter-mapping>

在这里碰到Filter的过滤器调用先后的问题(因为本人用的是struts2),如果过滤的路径有struts过滤器过滤的路径则需要把过滤器的配置配置在struts的过滤器之前,这样才能过滤成功。
在网上也谷歌了几个ext处理session失效的问题,有些把处理放在前端,当然我们可以把处理放在后台,当判断session失效时便直接跳转到登录页面便可,在上面过滤的程序中有段代码是与前台进行交互的,主要是因为ext的异步请求,ext的异步请求都会有一个回调函数便是:Ext.Ajax.on('requestcomplete',checkSessionStatus, this); 第二个参数是回调函数名,如我的回调函数内容是:

function checkSessionStatus(conn,response,options){  
	//alert(response.responseText);
	if(response.responseText.indexOf("<?xml")<0){
		//alert(response.responseText);
		var json = Ext.decode(response.responseText);
		var success = "";
		var timeout = "";
		var redirectUri = "";
		if(json != null && json.length != null){
			success = json[0].success;
			timeout = json[0].timeout;
			redirectUri = json[0].redirectUri;
		} else {
			success = json.success;
			timeout = json.timeout;
			redirectUri = json.redirectUri;
		}
		if(typeof json == 'object' && !success && timeout ){
	        top.window.location.href = redirectUri;                              
    	}
	}
    
} 
	

 
这样便能处理ext中异步请求的session失效问题。 

相关资料请参考:
http://www.myext.cn/webkf/19168.html





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值