(转)EXT结合acegi解决ajax提交时session失效的问题
背景
B/S系统中,客户端向服务器端提交的http请求,可以分为两种:非ajax请求(一般http请求)和ajax请求。Acegi是通过一系列的filter实现的安全框架(现在好像升级成spring sceurity了)。对于非ajax请求时的session失效,acegi已经完成,即如果session失效则自动跳转到登录页面。
解决方案
Acegi对于session失效(或其他web异常)的处理是通过“org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint”类来实现的,具体配置如下:
<bean id="exceptionTranslationFilter" value="/login.jsp"/> <property name="forceHttps" value="false"/> </bean> </property> </bean>
Ext.Ajax.on('beforerequest', function(){ Ext.Ajax.extraParams={'ajax_extraParams':'true'}; }, this);//
<bean id="exceptionTranslationFilter" value="/checkLogin.jsp"/> <property name="forceHttps" value="false"/> <property name="serverSideRedirect" value="true"/> </bean> </property> </bean>
<% String extraParams=request.getParameter("ajax_extraParams"); System.out.println("extraParams:"+extraParams); if("true".equals(extraParams)){ out.print("{ajax_session_invalid:true}"); return; } String contextPath = request.getContextPath(); response.sendRedirect(contextPath+"/login.jsp");%>
Ext.Ajax.on('requestcomplete', function(conn,response){try{ var resp=Ext.decode(response.responseText); if(resp.ajax_session_invalid){ alert("请重新登陆!") location=g_rootPath+"login.jsp"; }}catch(e){}}, this);