2010-06-02 114 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,否则给客户提供消息请求中提供相应的信息。