2012-08-30 31 views
-1

我要授權使用登錄頁面的用戶。我創建了一個登錄頁面,login.jsp,它有登錄表單。當我提交表單時,它的值被重定向到一個檢查servlet,如果用戶有效,servlet會設置會話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'方法轉發給COMMITED。例如。該過濾器轉發給發出重定向命令的servlet。 – home

+0

修正你的代碼爲你(有待審查),但你缺少的密切'}'關於你的第2'if's。那裏是否有任何代碼,或只是'}? – Windle

回答

0

理想情況下,servlet過濾器在servlet之前被調用時應該執行授權內容。一旦成功,應通過chain.doFilter(req,res)傳遞呼叫。

res.sendRedirect()不應該在Servlet過濾器被調用。這只是表明答覆已經提交。

在web.xml正確映射確保所需的過濾器被調用的servlet之前調用。稍後在servlet中,如果需要重定向,則可以實現。

+0

好的。謝謝你解決了我的問題! –