【问题标题】:Servlet vs FilterServlet 与过滤器
【发布时间】:2011-02-26 18:45:49
【问题描述】:

ServletFilter 有什么区别?您建议使用什么来授权页面?

【问题讨论】:

    标签: java servlets servlet-filters


    【解决方案1】:

    如果您想根据特定条件过滤和/或修改请求,请使用Filter。如果您想控制、预处理和/或后处理请求,请使用Servlet

    Java EE tutorial 提到了以下关于过滤器的内容:

    过滤器是一个可以转换请求或响应的标头和内容(或两者)的对象。过滤器与 Web 组件的不同之处在于过滤器本身通常不会创建响应。相反,过滤器提供可以“附加”到任何类型的 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);
        }
    }
    

    【讨论】:

      【解决方案2】:

      过滤器最适合授权。这是因为它们可以配置为针对站点的所有页面运行。因此,您只需要一个过滤器即可保护您的所有页面。

      【讨论】:

      • 所有页面 = 可能需要登录的页面。
      【解决方案3】:

      使用过滤器我们可以提高 servlet 的性能—— 当请求到来时,我们可以对请求进行预处理,如果请求满足,那么我们可以转发给 servlet,否则向客户端提供消息,在请求中提供适当的信息..

      【讨论】:

        猜你喜欢
        • 2010-12-30
        • 2014-08-21
        • 2012-02-15
        • 2014-07-22
        • 2012-06-24
        • 2012-02-17
        • 2013-04-09
        • 2014-04-07
        • 2014-02-12
        相关资源
        最近更新 更多