总结一下关于 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版本比较新

    

 

      

          

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