2010-06-02 169 views

回答

89

如果您想根據特定條件篩選和/或修改請求,請使用Filter。當您想要控制,預處理和/或後處理請求時,請使用Servlet

Java EE tutorial提到以下有關過濾器:

過濾器是一個對象,它可以將一個請求或響應的報頭和內容(或兩者)。過濾器與Web組件的不同之處在於過濾器通常本身不會創建響應。相反,過濾器提供的功能可以「附加」到任何種類的網絡資源。因此,一個過濾器不應該對其作爲過濾器的Web資源有任何依賴關係;這樣它可以由多種類型的網絡資源組成。是

,一個過濾器可以執行的主要任務如下:

  • 查詢請求並採取相應的行動。
  • 阻止請求和響應對進一步傳遞。
  • 修改請求標頭和數據。您可以通過提供自定義版本的請求來完成此操作。
  • 修改響應標頭和數據。您可以通過提供自定義版本的響應來執行此操作。
  • 與外部資源進行交互。

對於授權,一個Filter是最適合的。這裏有一個基本的開球例如如何爲登錄用戶過濾器檢查請求:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 
    if (((HttpServletRequest) request).getSession().getAttribute("user") == null) { 
     // User is not logged in. Redirect to login page. 
     ((HttpServletResponse) response).sendRedirect("login"); 
    } else { 
     // User is logged in. Just continue with request. 
     chain.doFilter(request, response); 
    } 
} 
+0

感謝您澄清+1對於 – 2013-10-24 10:34:33

+0

提供的鏈接是非常好的。也爲此感謝。 – 2013-10-24 10:39:34

15

過濾器最適合授權。這是因爲它們可以配置爲運行網站的所有頁面。所以你只需要一個過濾器來保護你的所有頁面。

+0

所有頁面=可能需要登錄的頁面。 – UnKnown 2016-09-06 21:11:44

1

使用過濾器,我們可以改善的servlet到性能 當請求來自我們會按要求進行預處理,如果滿足要求則我們可以轉發給servlet,否則給客戶提供消息請求中提供相應的信息。