Struts2 设置定时器监听销毁session(若干秒后自动返回首页)
有时候为了安全起见,需要实现网页长时间不操作,几秒后自动返回首页重新登录功能。这个时候可以使用Struts2定时器与拦截器来实现。步骤如下:
① 在应用程序的web.xml中设置session销毁时间
<!--设置超时时间,1代表1分钟--> <session-config> <session-timeout>1</session-timeout> </session-config>
② 写一个Struts2的自定义拦截器,用来判断session是否已经被销毁。
public class LoginCheckInter extends AbstractInterceptor { @Override public String intercept(ActionInvocation arg0) throws Exception { Map session=ActionContext.getContext().getSession(); Action action = (Action) arg0.getAction(); String username=(String) session.get("username"); //验证session是否过期,如果过期转到对应页面 if(username!=null) { //返回继续执行 return arg0.invoke(); } else { //执行全局变量result为"sessionOut" return "sessionOut"; } } }
备注:ActionContext.getContext().getSession();是获得SessionAware接口中Map<String,Object>集合类型的session的。
如果使用其他方式获得session的话,请使用对应方式取得session再判断。
Struts2 action 实现SessionAware接口,可以实现session 保存结果集的功能。
③ 在struts.xml中自定义一个拦截器栈,如下:
<!-- 自定义拦截器 --> <interceptors> <interceptor name="loginCheck" class="com.hanyun.interceptor.LoginCheckInter" /> <interceptor-stack name="mystack"> <interceptor-ref name="loginCheck"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors>
④ 定义完拦截器栈之后,定义全局result,如下
<!-- 定义全局result --> <global-results> <result name="toLogin">/index.jsp</result> <result name="sessionOut">/tip.jsp</result> </global-results>⑤ 在需要执行检查的action中使用自定义拦截器栈
<!-- 对虚拟机进行操作:开机或关机 --> <action name="vmOper" class="com.hanyun.action.VMOpenAction" method="operation"> <result type="json">result</result> <interceptor-ref name="mystack"/> </action>
⑥ 编写tip.jsp页面,实现若干秒中之后自动返回登录页
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title></title> <link rel="stylesheet" href="css/style2.css" type="text/css"></link> <script type="text/javascript" src="js/jquery.min.js"></script> <script type="text/javascript" src="js/jquery.query-2.1.7.js"></script> <script type="text/javascript"> $(document).ready(function(){ delayURL("index.jsp"); }); </script> <script type="text/javascript"> function delayURL(url) { var delay = document.getElementById("time").innerHTML; if(delay > 0) { delay--; document.getElementById("time").innerHTML = delay; } else { window.top.location.href = url; } setTimeout("delayURL("" + url + "")", 1000); } </script> </head> <body background="images/bg-login.gif"> <label style="font-size: 13px;color: #FFFFFF;font-weight: bold;">由于长时间未操作,请</label> <span id="time" style="color: red;font-weight: bold;" >5</span> <label style="font-size: 13px;color: #FFFFFF;font-weight: bold;">秒钟后自动跳转首页,重新登录。</label> <p> <label style="font-size: 13px;color: #FFFFFF;font-weight: bold;">如果不跳转,请点击下面的链接:</label> <a href="index.jsp" style="font-size: 13px">百度</a> </p> </body> </html>
结束....
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。