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

Ext结合Struts的Session超时处理

    博客分类:
  • Ext
阅读更多

配置struts.xml文件的默认拦截器(注:登录的action用<default-interceptor-ref name="defaultStack" />)

<interceptors>
     <interceptor name="loginInterceptor" class="com.fireinjava.ui.interceptor.LoginInterceptor" />
     <interceptor-stack name="myDefaultIntegerceptor">
           <interceptor-ref name="loginInterceptor" /> 
           <interceptor-ref name="defaultStack" />
     </interceptor-stack>
</interceptors>
		
<default-interceptor-ref name="myDefaultIntegerceptor" />

 

拦截器LoginInterceptor.java

package com.fireinjava.ui.interceptor;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.http.HttpServletResponse;

import org.apache.struts2.ServletActionContext;

import com.fireinjava.ui.UserEnv;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

/**
 * @version 1.0
 * @data 2009-9-23
 * @描述:检查Session是否超时
 */
public class LoginInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation actioninvocation) throws Exception {
		ActionContext context = actioninvocation.getInvocationContext();
		Map session = context.getSession();
		UserEnv user = (UserEnv) session.get("userEnv");
		System.out.println(">>>>>>>>>>>>>LoginInterceptor");
		if (user != null) {
			return actioninvocation.invoke();
		} else {
			outString("<script type=\"text/javascript\">var session='SessionExpired'; function getRootWin(){var win = window;while (win != win.parent){win =win.parent;}return win;} getRootWin().reLogin();</script>");//页面接收
		}
		return Action.NONE; // 页面上写一个Login弹出窗口
	}

	public void outString(String str) {
		HttpServletResponse response = ServletActionContext.getResponse();
		try {
			response.setHeader("Pragma", "No-cache");
			response.setHeader("Cache-Control", "no-cache");
			response.setDateHeader("Expires", 0);
			response.setContentType("text/html;charset=gbk");
			PrintWriter out = response.getWriter();
			out.write(str);
			out.flush();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

 jsp 页面代码:

 

<script type="text/javascript">

function getRootWin(){   
    var win = window;   
    while (win != win.parent){   
        win = win.parent;   
    }   
    return win;   
}   

var reLoginWin;

reLogin = function (){ getRootWin().reLoginWin=new Ext.Window(....);}//登录窗口

Ext.Ajax.on('requestcomplete', function(conn, response, options, e){  var returnVal=response.responseText;  if(!Ext.isEmpty(returnVal)&&returnVal.indexOf('SessionExpired')!=-1)   reLogin();});

</script>

 

  

嵌入外部页面时,保持本应用的Session激活

function keepSession(){
     Ext.Ajax.request({url : 'keepSession.action'});
}
setInterval("keepSession()",60000);//1分钟调用下

 

<action name="keepSession" class="com.xx.BaseAction" method="keepSession"/>

public void keepSession(){

}

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics