2015-10-17 57 views
1

我在阅读关于Java过滤器,我了解它的实现以及如何使用它,但我不知道我们为什么使用它。 当我读取过滤器用于过滤url以保存/保护资源免遭非法访问,但我很困惑,我们可以做到这一点与会话然后为什么过滤器?从here读完完整的详细信息后。我得到这个段落太接近,无法清除我的概念。Java Servlets过滤器如何有用

在上一篇文章中,我们了解到我们如何能够在网络 应用程序管理会话,如果我们要确保资源的访问 只有当用户会话是有效的,我们能做到这一点使用的servlet 会议属性。这种方法很简单,但如果我们有很多 servlets和jsps,那么由于 冗余代码,它将变得很难维护。如果我们想在将来改变属性名称,我们 将不得不改变我们有会话 认证的所有地方。

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

+0

该博客是错误地编写的,你以不同的方式理解它。 –

+0

@sᴜʀᴇsʜᴀᴛᴛᴀ你能清楚我的困惑吗?为什么我们需要/使用servlet? – UnKnown

+0

简单的答案是过滤请求和长的回答将需要最近一个小时解释;)总是阅读官方文档 –

回答

-1

过滤器的好处之一是您可以将过滤器应用于许多Servlet,而不是在您拥有的每个servlet中编写相同的代码。

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

4

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

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

,并引入了251th Servlet时,你必须忘记的一大机会添加该检查。

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

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

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

+0

@JBNizat,当我读取servlet之前自动调用的过滤器,但假设我有2个或更多过滤器如何连接到servlet?是指为哪个servlet调用哪个过滤器? – UnKnown

+0

就像servlet映射到URL一样,过滤器也是。您还可以将筛选器映射到servlet,这意味着只要对该servlet发出请求就会调用该筛选器。 –

+0

最好有一个过滤器超过250个servlets是噩梦。 –

0

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

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

假设我有Servlet'A'和Filter'B',我可以如何映射它们,当调用Servlet'A'然后自动调用Filter'''时。 – UnKnown

+0

映射它们'/ *'意味着所有的东西 –

+0

@RomanC但是如果我用其他地图代替'/ *'那么呢?该过滤器将只为该URL调用? – UnKnown