SessionHandlerInterceptor
繼承自org.springframework.web.servlet.HandlerInterceptor
public class SessionHandlerInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
if (httpServletRequest.getHeader("x-requested-with") != null && httpServletRequest.getHeader("x-requested-with").equalsIgnoreCase("XMLHttpRequest")){
//如果是ajax請求響應頭會有,x-requested-with;
HttpSession session = httpServletRequest.getSession();
Profile profile = (Profile)session.getAttribute(LoginController.PROFILE);
System.out.println("SessionHandlerInterceptor: "+profile);
if (profile == null){//判斷session裏是否有用戶信息
//httpServletResponse.setHeader("sessionstatus", "timeout");//在響應頭設置session狀態
httpServletResponse.getWriter().write("{'sessionstatus':'timeout'}");
return false;
}
}
return true;
}
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
}
}
beans.xml配置
<!--對涉及到session操作的增刪改請求進行攔截,進行Session校驗-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*/*create*"/>
<mvc:mapping path="/*/*update*"/>
<mvc:mapping path="/*/*delete*"/>
<mvc:mapping path="/login/logout.action"/>
<bean class="com.xxxxx.xxx.filter.SessionHandlerInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>
js創建全局函數
//Ajax全局處理方法,用於處理session失效
$.ajaxSetup({
contentType:"application/x-www-form-urlencoded;charset=utf-8",
complete:function(XMLHttpRequest,textStatus){
//var sessionstatus=XMLHttpRequest.getResponseHeader("sessionstatus"); //通過XMLHttpRequest取得響應頭,sessionstatus,
validSession(XMLHttpRequest.responseText);
}
});
//Extjs的全局處理方法,用於處理session失效
Ext.Ajax.on('requestcomplete',checkSessionStatus, this);
function checkSessionStatus(conn,response,options){
validSession(response.responseText);
}
//校驗session的有效性
function validSession(responseText){
var json = Ext.decode(responseText);
var sessionstatus = json.sessionstatus;
if(sessionstatus == 'timeout'){
//此處對session失效進行處理
}
}