Filter过滤器会对servlet及jsp进行拦截,可以在request和response到达servlet和jsp之前对其做一些修改。
例如登陆问题,未登陆用户我们可以通过filter过滤器拦截重定向到登陆界面,已登录用户放行。
但我在写此方法是遇到进行登录验证时循环重定向,因为当你重定向到登陆界面时还未登陆,过滤会拦截并再次重定向到登陆界面,无限循环。
解决方法在此记录下。
//这个方法要小心,它拦截所有请求除了login.jsp与DoLogin。就是因为这样,我的登陆背景图片被拦截了。
StringBuffer urlb = ((HttpServletRequest)request).getRequestURL();
System.out.println(urlb);
if(urlb.lastIndexOf("login.jsp") >= 0||urlb.lastIndexOf("DoLogin") >= 0) {
//当浏览器跳转到以login.jsp或DoLogin?action=login结尾时直接进行下一步,而不再进行
//过滤验证,即当跳转登陆界面或处理登陆的servlet时不进行过滤拦截
chain.doFilter(request, response);
return;
}
//其他界面,用户验证
String url;
HttpSession session = ((HttpServletRequest)request).getSession(false);
/*
* create - true to createa new session for this request if necessary;
* false to return nullif there's no current session
*/
if(session != null) {
String isLogin = (String)session.getAttribute("isLogin");
if(!"true".equals(isLogin)) {
url = "login.jsp";
}else {
chain.doFilter(request, response); //已登录放行
return;
}
}else {
url = "login.jsp";
}
((HttpServletResponse)response).sendRedirect(url); //未登录重定向