我正在阅读Java过滤器,我理解它的实现以及如何使用它,但我不知道为什么我们使用它。 当我读到用于过滤网址以保存/保护资源免受非法访问的过滤器时,但我很困惑我们可以通过会话执行此操作然后为什么过滤器?从here阅读完整的详细信息后。我得到的这个段落太接近了我的概念。
在上一篇文章中,我们学习了如何在Web中管理会话 应用程序,如果我们想确保资源可访问 只有当用户会话有效时,我们才能使用servlet实现这一点 会话属性。方法很简单,但如果我们有很多 servlets和jsps,因为它会变得难以维护 冗余代码。如果我们希望将来更改属性名称,我们 将不得不改变我们会议的所有地方 认证
确定以上段落清除概念作为理论基础,但是任何人都可以向我展示显示过滤器对Java Servlet非常有用的程序示例。使用和不使用过滤器时,Web应用程序或资源如何影响?
答案 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。