Struts2 设置定时器监听销毁session(若干秒后自动返回首页)

来源:互联网 发布:mac一般什么时候发布 编辑:程序博客网 时间:2024/06/06 18:26

有时候为了安全起见,需要实现网页长时间不操作,几秒后自动返回首页重新登录功能。这个时候可以使用Struts2定时器与拦截器来实现。步骤如下:

     ① 在应用程序的web.xml中设置session销毁时间

    <!--设置超时时间,1代表1分钟-->    <session-config>      <session-timeout>1</session-timeout>    </session-config>

    ② 写一个Struts2的自定义拦截器,用来判断session是否已经被销毁。

public class LoginCheckInter extends AbstractInterceptor {@Overridepublic 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>


结束....




0 0
原创粉丝点击