参考: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提交
}
本文详细介绍了如何使用Ext.js框架实现Ajax请求,并在登录验证失败或超时时进行特定处理,包括设置登录错误提示和重定向到登录页面。
1681

被折叠的 条评论
为什么被折叠?



