Filter進行登錄驗證時循環重定向的解決方法

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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章