
这种是由于条件判断有误,程序不断的重定向到一个页面,而造成的死循环的情况
下面列举一个常出现的场景之一
解释:当用户访问login.jsp进行登录的时候,这个时候请求会被Filter捕获,Filter通过session获取用户登录成功之后的信息,但是此时用户并没有登录,程序又会重定向到login.jsp。
这个时候就会出现程序进入Filter后返回重定向到login.jsp.
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
- throws IOException, ServletException {
- System.out.println("=============loginFilter=============");
- //进来之后我需要判断当前用户有没有登录,如果登录放行,否则去登录页
- //1、获取当前的请求地址
- HttpServletRequest request=(HttpServletRequest)servletRequest;
- HttpServletResponse response=(HttpServletResponse)servletResponse;
-
-
- HttpSession session=request.getSession();
- UserInfo user=(UserInfo)session.getAttribute("userinfo");
-
- if(user==null){
- response.sendRedirect("login.jsp");
- return ;
- }
- //FilterChain过滤链,进行放行
- filterChain.doFilter(servletRequest, servletResponse);
- }
这个时候我们需要获取当前用户的请求地址,当请求地址URL中包含login等登录字样的时候,直接放行,让用户去登录,而不是拦截。
- public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain)
- throws IOException, ServletException {
- System.out.println("=============loginFilter=============");
- //进来之后我需要判断当前用户有没有登录,如果登录放行,否则去登录页
- //1、获取当前的请求地址
- HttpServletRequest request=(HttpServletRequest)servletRequest;
- HttpServletResponse response=(HttpServletResponse)servletResponse;
- String url=request.getRequestURI();
- System.out.println("==url=="+url);
- //如果请求的地址中包含了login字样,说明用户正在登录,放行。
- //indexOf判断login在url字符串中首次出现的索引的位置
- if(url.indexOf("login")>=0 || url.indexOf("userinfo.do")>=0){
- //用户在登录中,放行
- filterChain.doFilter(servletRequest, servletResponse);
- return ;
- }
-
- HttpSession session=request.getSession();
- UserInfo user=(UserInfo)session.getAttribute("userinfo");
- System.out.println("==user==filter==="+user);
- if(user==null){
- response.sendRedirect("login.jsp");
- return ;
- }
- //FilterChain过滤链,进行放行
- filterChain.doFilter(servletRequest, servletResponse);
- }