在用户登录以后,用户一段时间不进行任操作,session已经失效了,但是用户又想在当前操作界面上继续操作,此时我们的拦截器就有用武之地了:
首先编写拦截器实现类:
package jf;
import java.util.Map;
import org.apache.struts2.ServletActionContext;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class SessionsInterceptor extends AbstractInterceptor
{
private static final long serialVersionUID = -740106586199968939L;
@Override
public String intercept(ActionInvocation invocation) throws Exception
{
/**取得请求相关的ActionContext实例**/
ActionContext ac=invocation.getInvocationContext();
Map session=(Map) ac.get(ServletActionContext.SESSION);
/**判断session是否失效**/
if(session!=null)
{
String userId=(String)session.get("userId");//当前操作用户id
String userName=(String)session.get("userName");//当前操作用户名
if(userId==null||"".equals(userId)||userName==null||"".equals(userName))
{
return "relogin";//session失效,重新登陆
}
}
return invocation.invoke();//session没有失效,返回执行所要执行的action
}
}
然后在所有你要拦截的xml配置文件中添加:
<interceptors>
<interceptor name="sessionInterceptor"
class="jf.SessionsInterceptor">
</interceptor>
</interceptors>
<global-results>
<result name="relogin">/html/login/nologin.jsp</result>
</global-results>
你再测试下,是否用户重新登录后又能进行相应的操作了。其实拦截器还有很多地方可以应用,比如编码问题等等。。。
这个就要具体实用具体考虑了。