参考:http://lym6520.iteye.com/blog/871092
1.Ext增加如下代码
Ext.Ajax.defaultHeaders = { 'Request-By': 'Ext' // 标识ajax请求 }; Ext.Ajax.on('requestcomplete',function(conn,response,options){ var json = Ext.decode(response.responseText); if(typeof json == 'object' && !json.success && json.timeout){ alert('<fmt:message key="msgBox.loginerror.timeout"/>'); window.location.href = 'login.jsp'; } });
2.Filter代码:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
List<String> list = new ArrayList<String>();
list.add(loginUrl);
list.add("/login");
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse servletResponse = (HttpServletResponse) response;
String path = httpServletRequest.getServletPath();
User user = (User) httpServletRequest.getSession().getAttribute("user");
if (!list.contains(path) && user == null) {
String ext = httpServletRequest.getHeader("Request-By");
if (ext != null && ext.equalsIgnoreCase("Ext")) {
servletResponse.addHeader("sessionstatus", "timeout");
PrintWriter out = servletResponse.getWriter();
out.print("{success:false,timeout:true}");
out.flush();
out.close();
} else {
servletResponse.sendRedirect(httpServletRequest.getContextPath() + loginUrl);
}
}
chain.doFilter(request, response);
}
3.也可以直接判断是否为Ajax提交
String head = httpRequest.getHeader("x-requested-with");
if (head != null && !(head.equalsIgnoreCase("XMLHttpRequest"))) {
//Ajax提交
}