Infinite loop occures when run the program

那年仲夏 提交于 2019-12-11 19:22:35

问题


This java web application run like an infinite loop. can anyone tell me the reason? need to filter every request here.allowed can use the system.other users should go to login page with a message..please help me to do this.

FilterRequest.java

package com.mobitel.bankdemo.web;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.mobitel.bankdemo.domain.User;

public class FilterRequest implements Filter{
    FilterConfig filterConfig = null;

    public FilterRequest() {
        super();
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        System.out.println("Inside the filter.............."  );
          HttpSession session = request.getSession(true);
          User u = null;
          if(session.getAttribute("loggedUser")!=null){
              u = (User) session.getAttribute("loggedUser");
          }       
          if (u!= null)
          {
              System.out.println("user does exits.." + u.getUname() );
              chain.doFilter(req, resp);

          }else{
              String message = "Please Login!";             
              req.setAttribute("loginMsg", message);
              response.sendRedirect("login2.jsp");
          }
    }
    public void destroy() {
        // do cleanup stuff
    }
}

web.xml filter mapping

<filter>
        <filter-name>FilterRequest</filter-name>
        <filter-class>com.mobitel.bankdemo.web.FilterRequest</filter-class>                 
  </filter>
  <filter-mapping>
        <filter-name>FilterRequest</filter-name>
        <url-pattern>*.jsp</url-pattern>
  </filter-mapping> 

Thank you in advance


回答1:


public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
            HttpServletRequest request = (HttpServletRequest) req;
            HttpServletResponse response = (HttpServletResponse) resp;
            System.out.println("Inside the filter.............."  );
    String loginUrl= request.getContextPath() + "/login2.jsp";//url for login page
        String uri = request.getRequestURI().toString();
        if (uri.endsWith(loginUrl)){// if uri is login page then no need to check if login, just process the chain
            chain.doFilter();
        } 
           else{   HttpSession session = request.getSession(true);
              User u = null;
              if(session.getAttribute("loggedUser")!=null){
                  u = (User) session.getAttribute("loggedUser");
              }       
              if (u!= null)
              {
                  System.out.println("user does exits.." + u.getUname() );
                  chain.doFilter(req, resp);

              }else{
                  String message = "Please Login!";             
                  req.setAttribute("loginMsg", message);
                  response.sendRedirect("login2.jsp");
                  return;
              }
    }
        }



回答2:


i am not java expert but just looking over your code i just want to say two things

(1) consider if filter gets a user name from request like here

if(session.getAttribute("loggedUser")!=null){
              u = (User) session.getAttribute("loggedUser");
          }       
          if (u!= null)
          {
              System.out.println("user does exits.." + u.getUname() );
              chain.doFilter(req, resp);

it will go again into subroutine or method to filter other things but after getting into this method you are doing user=null and due to this it will again enter into same if we have sorted out before

which is

                if (u!= null)
              {
                  System.out.println("user does exits.." + u.getUname() );
                  chain.doFilter(req, resp);

so define User u=null outside of your method. May be it will solve ur problem



来源:https://stackoverflow.com/questions/17568476/infinite-loop-occures-when-run-the-program

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!