[Spring] session有效性判斷

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失效進行處理
    }
}
發佈了167 篇原創文章 · 獲贊 25 · 訪問量 60萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章