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

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值