Java Servlet过滤器如何有用

时间:2015-10-17 16:59:23

标签: java jsp session servlets

我正在阅读Java过滤器,我理解它的实现以及如何使用它,但我不知道为什么我们使用它。 当我读到用于过滤网址以保存/保护资源免受非法访问的过滤器时,但我很困惑我们可以通过会话执行此操作然后为什么过滤器?从here阅读完整的详细信息后。我得到的这个段落太接近了我的概念。

  

在上一篇文章中,我们学习了如何在Web中管理会话   应用程序,如果我们想确保资源可访问   只有当用户会话有效时,我们才能使用servlet实现这一点   会话属性。方法很简单,但如果我们有很多   servlets和jsps,因为它会变得难以维护   冗余代码。如果我们希望将来更改属性名称,我们   将不得不改变我们会议的所有地方   认证

确定以上段落清除概念作为理论基础,但是任何人都可以向我展示显示过滤器对Java Servlet非常有用的程序示例。使用和不使用过滤器时,Web应用程序或资源如何影响?

3 个答案:

答案 0 :(得分:4)

假设您有一个包含300个servlet的大型Web应用程序,只有经过身份验证才能访问其中250个。为了防止未经身份验证的用户访问这250个servlet,您将在每个servlet中重复以下伪代码:

if (!currentUser.isAuthenticated()) {
    throw new ForbiddenException();
}

在介绍第251个servlet时,你很有可能忘记添加该检查。

过滤器允许说容器:对于发送到/private/*的所有请求,在调用映射到URL的servlet之前执行以下过滤器。

然后,您可以忘记检查250个servlet中的身份验证,并在筛选器中执行一次,只执行一次。

当然还有其他用例:授权检查,日志记录,性能测量等。

答案 1 :(得分:0)

在任何servlet之前调用的过滤器。这是主要的区别。过滤器的一个很好的例子是Struts2过滤器。

<filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.filter.ng.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

答案 2 :(得分:-1)

Filters的一个好处是,您可以将Filter应用于许多Servlet,而不是在每个Servlet中编写相同的代码。

编辑:为避免混淆,您不要直接为servlet应用过滤器,而是应用URI。