培养奇才的先决前提是公共的聪明以前的项目用的是springsecurity3.0,session超时主动跳转的登录页(这个页面可配),后来页面前端用dwz框架了,各类提交都是ajax提交,session超时再点击就会报错,我要实现的是ajax提交被阻碍,断定session是否超时,若是超时返回到登录页面。
让我们保护公允,那么我们将会获得更多的。1.定义struts2阻碍器(网上例子很多)
代码如下:
package com.sf.emp.utils;
import javax.servlet.http.HttpServletRequest;
import org.springside.modules.utils.web.struts2.Struts2Utils;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
* 断定session是否超时的阻碍器
* 超时跳到登录页面
* @author gshen
*/
public class SessionIterceptor extends AbstractInterceptor {
private static final long serialVersionUID = 7579862236766378267L;
@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
System.out.println("into 阻碍器 。。。。。");
HttpServletRequest request = Struts2Utils.getRequest();
if ("XMLHttpRequest".equalsIgnoreCase(request.getHeader("X-Requested-With")) || request.getParameter("ajax") != null) {
if(Struts2Utils.getSession() == null || LoginUserHolder.getLoginUser() == null){
Ret.ret301("恳求超时!请从头登录!");
return null;
}
}
return actionInvocation.invoke();
}
}
??重视:Ret.ret301("");办法封装的是dwz框架的ajax响应字符串,类型是301,例如:{"statusCode":"301", "message":"Session Timeout! Please re-sign in!"},用PrintWriter类返回给前台。
2.然后设备struts.xml
代码如下:
<!-- 用于CRUD Action的parent package --> <package name="crud-default" extends="convention-default"> <!-- 基于paramsPrepareParamsStack, 增长store interceptor包管actionMessage在redirect后不会丧失 --> <interceptors> <interceptor name="sessionout" class="com.sf.emp.utils.SessionIterceptor" /> <interceptor-stack name="crudStack"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> <interceptor-ref name="store"> <param name="operationMode">AUTOMATIC</param> </interceptor-ref> <interceptor-ref name="paramsPrepareParamsStack" /> <interceptor-ref name="sessionout"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="crudStack" /> </package>
?声明此阻碍器,并放到客栈最底层,让其起首走这个阻碍器。
重视:调试的时辰先把session超不时候设置为1分钟,这个可以在web.xml里设置:
<!-- session超时定义,单位为分钟 --> <session-config> <session-timeout>20</session-timeout> </session-config>
3.测试:
登录后,等一分钟,点击呈现登录超时,并跳转到了登录页面。
若是想session超时之后设置页面不跳转,而是弹出框登录,请在dwz的初始化页面内批改:
<script type="text/javascript">
¥(function(){
DWZ.init("dwz.frag.xml", {
// loginUrl:"loginsub.html", loginTitle:"登录", // 弹出登录对话框
loginUrl:"login.html", // 跳到登录页面
statusCode:{ok:200, error:300, timeout:301}, //【可选】
pageInfo:{pageNum:"page.pageNum", numPerPage:"page.numPerPage", orderField:"orderField", orderDirection:"orderDirection"}, //【可选】
debug:false, // 调试模式 【true|false】
callback:function(){
initEnv();
¥("#themeList").theme({themeBase:"themes"});
}
});
});
</script>
?如许就完成了,原创能给大师带来帮助,转载请有名出处http://shen84121062.iteye.com/blog/1166554迪斯雷利