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>
结束....
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
