2017-11-22 3 views
0

대상에 대한 처리 전에 세션 내에서 로그인 한 사용자의 유효성을 검사하는 모든 요청을 가로 채기 위해 필터를 사용했습니다. 하지만 문제는 로그인을 시도 할 때 로그인 페이지로 계속 리디렉션된다는 것입니다. 사용필터 및 서블릿 인증

참조 : https://stackoverflow.com/questions/13274279/authentication-filter-and-servlet-for-login

필터

public class AuthenticationFilter implements Filter { 

    @Override 
    public void init(FilterConfig filterConfig) throws ServletException { 
     System.out.println("Filter init method()"); 
    } 

    @Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 
     System.out.println("Filter doFilter method()"); 
     HttpServletRequest req = (HttpServletRequest) request; 
     HttpServletResponse res = (HttpServletResponse) response; 
     HttpSession session = req.getSession(); 
     Users loggedIn = (Users) session.getAttribute("LoggedInUser"); 
     boolean loggedInUser = session != null && session.getAttribute("LoggedInUser") != null; 
     String logInURI = req.getContextPath() + "/loginPage.jsp"; 
     boolean loginRequest = req.getRequestURI().equals(logInURI); 
     if (loggedInUser || loginRequest) { 
      chain.doFilter(request, response); 
     } else { 
      res.sendRedirect(logInURI); 
     } 
    } 

    @Override 
    public void destroy() { 
    } 

} 

web.xml의

<filter> 
     <filter-name>AuthenticationFilter</filter-name> 
     <filter-class>AuthenticationFilter</filter-class> 
    </filter> 
    <filter-mapping> 
     <filter-name>AuthenticationFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

답변

0

더 많은 조사가 끝나면 나에게 잘 맞는 해결책이 여기에 있습니다.

@Override 
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 

     HttpServletRequest req = (HttpServletRequest) request; 
     HttpServletResponse res = (HttpServletResponse) response; 
     HttpSession session = req.getSession(); 

     /* Check if the user within the session */ 
     boolean loggedInUser = session.getAttribute("LoggedInUser") != null; 

     /* Get the login uri, to avoid infinite loop */ 
     String logInURI = req.getContextPath() + "/loginPage.jsp"; 

     /* Current reuest */ 
     String currentReq = req.getRequestURI(); 

     /* Get LoginServlet req */ 
     String loginServlet = req.getContextPath() + "/LoginServlet"; 

     /* Check if current request is for loginServlet */ 
     boolean loginServletReq = currentReq.equals(loginServlet); 

     /* Check if the request is equal to login page */ 
     boolean loginRequest = currentReq.equals(logInURI); 

     if (loginRequest) { 
      chain.doFilter(req, res); 
     } else if (loggedInUser) { 
      chain.doFilter(req, res); 
     } else if (loginServletReq) { 
      chain.doFilter(req, res); 
     } else { 
      res.sendRedirect(logInURI); 
     } 

    }