2012-08-30 4 views
-1

로그인 페이지로 사용자를 인증하고 싶습니다. 하나의 로그인 페이지 인 login.jsp을 만들었으며 로그인 폼이 있습니다. 양식을 제출할 때 그 값은 점검 서블릿으로 방향이 바뀌고 서블릿은 사용자가 유효한 경우 세션 UserName을 설정합니다."응답이 이미 커밋되었습니다."오류 - chain.doFilter()

필터를 통해이 요청을 가로 채고 chain.doFilter 뒤에 페이지를 리디렉션하려고하지만 응답이 이미 커밋되었다는 오류 메시지가 나타납니다. 문제가 무엇입니까?

HttpServletRequest req=(HttpServletRequest) request; 
HttpServletResponse res=(HttpServletResponse) response; 

if(req.getRequestURI().contains("/ShowHome")) { 

    chain.doFilter(req, res); 

    if(req instanceof HttpServletRequest) { 

     boolean authorized=false; 

     HttpSession session= req.getSession(false); 

     if(session!=null) { 
     if(session.getAttribute("UserName")!=null) { 
      authorized=true; 
     } 
     } else { 
     authorized=false; 
     } 

    if(authorized) { 
     System.out.println("You are authorized user "); 
     res.sendRedirect("/FilterAuth/welcome.jsp"); 
    } else { 
     System.out.println("authentication failed ! "); 

     try { 
     //response.flushBuffer(); 

     RequestDispatcher disp= request.getRequestDispatcher("/index.jsp"); 
     disp.forward(request, response); 
     return; 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 
    } 
+2

귀하의 질문에 대해 귀하의 코드를 포맷하십시오 : 응답은 이미'doChain' 메소드가 전달한 함수에 의해 커밋되었습니다. 예 : 필터는 리다이렉트 커멘드를 발행 한 서블릿에 전송됩니다. – home

+0

코드를 보류 중입니다 (검토 대기 중). 처음 두 번의'if '에 대해'}'가 없습니다. 거기에 어떤 코드가 있는가, 아니면 단지'}'s인가? – Windle

답변

0

서블릿이 인증 물건을 수행해야합니다 전에 호출 이상적으로 서블릿 필터. 성공하면 chain.doFilter (req, res)를 통해 호출을 전달해야합니다.

res.sendRedirect()는 서블릿 필터에서 호출하면 안됩니다. 이는 단순히 응답이 커밋되었음을 나타냅니다.

web.xml의 올바른 매핑을 통해 서블릿을 호출하기 전에 필요한 필터를 호출 할 수 있습니다. 리다이렉트가 필요하다면 나중에 서블릿에서 수행 할 수있다.

+0

확인. 당신이 내 문제를 해결해 주셔서 감사합니다 !! –