1:在你的struts的xml配置文件里面配置你你的拦截器
<!-- session超时拦截器 -->
<package name="iterceptor" namespace="/" extends="struts-default">
<interceptors>
<!-- 自定义拦截器 class是需要自己定义配置的,下面会有解释-->
<interceptor name="permission" class="sessionIterceptor" />
<interceptor name="accessControl" class="accessControlIterceptor" />
<!-- 配制默许的拦截器到拦截器栈 -->
<interceptor-stack name="permissionStack">
<!-- 此处先后顺序没影响,这里是引用上面的interceptor name 。-->
<interceptor-ref name="permission" />
<!-- <interceptor-ref name="accessControl" /> -->
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<!-- 配置默认的拦截器 ,permissionStack是struts自带的-->
<default-interceptor-ref name="permissionStack" />
<!-- 全局变量,超时返回登录页面 -->
<global-results>
<result name="loginPage">
/WEB-INF/pages/common/session.jsp
</result>
</global-results>
</package>
2:在你的struts,bean的配置文件里面,配置上述两个自定义class
<!-- 自定义过滤器类 -->
<bean name="sessionIterceptor"
class="com.onecom.onecomframework.utils.iterceptor.SessionIterceptor">
<!-- <property name="service" ref="loginAndQuitService"></property> -->
</bean>
<!-- 权限控制拦截器
<bean name="accessControlIterceptor"
class="com.onecom.onecomframework.utils.iterceptor.AccessControlIterceptor">
</bean>
-->
3:编辑自定义class,校验session是否过期,过期的判断是session里面的用户名和密码为空
package com.onecom.onecomframework.utils.iterceptor;
import com.onecom.amp.system.common.web.action.LoginAndQuitAction;
import com.onecom.onecomframework.utils.tools.StringUtils;
import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* session校验拦截器类
*
* @author tangx
* @version V100 2013-4-14
* @see [相关类/方法]
* @since ONECOMTECH.COM V100R001C00
*
*/
public class SessionIterceptor extends AbstractInterceptor {
/**
* 属性serialVersionUID
*/
private static final long serialVersionUID = 1L;
/**
* service层,超时退出时修改登录状态和记录退出时间
* 此方法覆盖父类的方法
*
* @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
*/
@Override
public String intercept(ActionInvocation invocation) throws Exception {
// 过滤掉登录/退出请求
Action action = (Action) invocation.getAction();
if (action instanceof LoginAndQuitAction) {
return invocation.invoke();
}
// 校验session是否已被清空
ActionContext ctx = invocation.getInvocationContext();
String userName = (String) ctx.getSession().get("userName");
String loginSeriaId = (String) ctx.getSession().get("loginSeriaId");
if (!StringUtils.isEmpty(userName)
|| !StringUtils.isEmpty(loginSeriaId)) {
return invocation.invoke();//如果session不为空的话,那就继续做后续的事情,返回各自action里面的东西
}
return "loginPage"; // 如果session为空的话,直接返回登录界面,这个是在global-results里面配置的
}
}
4:最后把<global-results>的代码贴上来
<html>
<head>
<script type="text/javascript">
alert("您本次登录操作已超时,请重新登录!");
window.top.location.href="/onecom/login.jsp"; //链接到你自己的登录界面就OK了。onecom为我自己的工程名,
</script>
</head>
</html>