總結一下關於 spring-security 3 ajax session 超時首頁無法跳轉的問題

  


 該文章適合對已經對 spring-security 3 有一定了解的同鞋。第一次發文歡迎各位多提意見 。

           

            
     本文使用的spring-security 版本爲  3.0.5 。就 jquery 版本爲 1.6

    


             在網上搜索了很多解決該問題的方法,總體思路都是通過服務端生成錯誤碼,然後前端擴展ajax的方法 統一處理會話超時的問題。閒話不多說直接上代碼:

 


        首先是修改配置文件:

	<http auto-config="true"  <span style="color:#FF0000;"> entry-point-ref="smartLoginUrlAuthenticationEntryPoint"</span> > 
         擴展添加一個攔截器  繼承 LoginUrlAuthenticationEntryPoint    注意2.0 版本是AuthenticationProcessingFilterEntryPoint 類,但是在3.0中已經過期了
所以直接繼承它的父類 
        
       <span style="color:#FF0000;"> <!--<logout logout-success-url="/login.jsp" />-->  </span>註釋跳轉配置 ,改用攔截器 

         <!-- 添加攔截器,session會話 超時攔截  -->
         <beans:bean id="smartLoginUrlAuthenticationEntryPoint"
                                class="com.smart.sys.core.security.SmartLoginUrlAuthenticationEntryPoint">
    <beans:property name="loginFormUrl" value="/login.jsp"/>
    
        服務端代碼處理 :

 

   public class SmartLoginUrlAuthenticationEntryPoint extends LoginUrlAuthenticationEntryPoint {
    @Override
    public void commence(HttpServletRequest request, HttpServletResponse response, AuthenticationException authException) throws IOException, ServletException {
        HttpServletRequest httpRequest = (HttpServletRequest)request;
        if ("XMLHttpRequest".equals(httpRequest.getHeader("X-Requested-With"))){    //當請求爲ajax請求的時候進入判斷處理
            response.setCharacterEncoding("UTF-8");
            response.addHeader("Error-Json", "{code:302,msg:'session tiemout !!',script:''}"); // 將錯誤放在header中
            response.setStatus(300);  // 定義300錯誤
        } else{
            super.commence(request, response, authException);
        }
    }
}

 

   前端jquery ajax方法擴展 , jquery中的    get   post   load 方法 都是擴展的ajax方法,所以改這裏就通用了  :(記得引用 jquery類庫 )

    (function($){
    var ajax=$.ajax;
    $.ajax=function(s){
        var old=s.error;
        var errHeader=s.errorHeader||"Error-Json";
        s.error=function(xhr,status,err){
            var errMsg =  xhr.getResponseHeader(errHeader)  ;
           alert(errMsg);
        }
        ajax(s);
    }

})(jQuery);
  

    response.setStatus(300);  //  status 定義非200的錯誤 就會進入該方法處理  ,

在方法中我們可以添加重定向,也可以彈出DIV讓客戶重新登錄!

 



參考文章 :

     http://dean-liu.iteye.com/blog/1937860      spring-security 2 的方式實現的 ,不過js調試不怎麼好使,可能我的jquery版本比較新

    

 

      

          

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章