日前遇到的如下问题:struts2的拦截器中进行了session的过期验证,如果过期,拦截到请求之后,跳转到登陆页面,但是这种方式,在处理form表单直接提交的时候是好用的,如果前台使用了ajax来提交这个表单,在session过期后提交表单页面无法跳转,请问大家知道这个问题如何解决吗?最好是通用的解决办法。。
jsp页面ajax:
$(function(){   
  $("#button1").click(function(){   
  $.ajax({   
  url:"<%=request.getContextPath()%>/backUpAction_create",  
  type:"POST",   
  data:$("#form").serialize(),   
  dataType:"json",   
  success:function(data){
  var obj = eval(data);
  if(obj.error!=""){
  alert(obj.error);
  }else if(obj.success!=""){
  window.location.href="dbJobInfo_getJobDetailUI?jobId="+obj.success;
  }else if(obj.unsuccess!=""){
  alert(obj.unsuccess);
  }
  }   
  });   
  });   
});  
struts2拦截器:
@Override
public String intercept(ActionInvocation invocation) throws Exception {
ctx = ActionContext.getContext();
request = (HttpServletRequest) ctx
.get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
System.err.println("CheckPrivilegeInterceptor.intercept()");
String url = invocation.getProxy().getActionName();
if (url.endsWith("UI")) {
url = url.substring(0, url.length() - 2);
}
UserSession userSession = (UserSession) ActionContext.getContext()
.getSession().get("userSession");
if (userSession != null) {
// get current user
User user = userSession.getUser();
if (user == null) {
// user not login
// if user want to login or logout
// invoke
// else to login UI
if (invocation.getProxy().getAction() instanceof LoginLogoutAction) {
return invocation.invoke();
} else {
return "loginUI";
}
} else {
// user has login
// get user sessionid
String sessionId = user.getSession_id();
// get user sessionid from db
String sessionId1 = userManager.get(user.getId())
.getSession_id();
// if equals
// invoke
if (sessionId == null || sessionId1 == null) {
return invocation.invoke();
} else {
if (sessionId.equals(sessionId1)) {
// confirm privilege
// User.getPrivilegeByUrl
if (request.getParameter("operation") != null) {
value = Integer.parseInt(request
.getParameter("operation"));
if (value == 0) {
return invocation.invoke();
} else {
if (user.hasPrivilege(value)) {
return invocation.invoke();
} else {
request.setAttribute("message",
"You haven't the privilege!");
return "message";
}
}
} else {
return invocation.invoke();
}
} else {
ctx = ActionContext.getContext();
request = (HttpServletRequest) ctx
.get(org.apache.struts2.StrutsStatics.HTTP_REQUEST);
if (request.getSession(false) != null) {
request.getSession(false).removeAttribute(
"userSession");
request.getSession(false).invalidate();
}
return "loginUI";
}
}
}
} else {
if (invocation.getProxy().getAction() instanceof LoginLogoutAction) {
return invocation.invoke();
} else {
return "loginUI";
}
}