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); //未登錄重定向