【问题标题】:How Java Servlets Filters are Useful [closed]Java Servlets过滤器如何有用[关闭]
【发布时间】:2015-10-17 16:59:23
【问题描述】:

我正在阅读有关 Java 过滤器的信息,我了解它的实现以及如何使用它,但我不知道我们为什么要使用它。 当我阅读过滤器用于过滤 url 以保存/保护资源免受非法访问时,但我很困惑我们可以对 session 做同样的事情那么为什么过滤器?从here 阅读完整的详细信息后。我得到的这段太接近了,无法清楚我的概念。

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

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

【问题讨论】:

  • 博客写错了,你理解的方式不同。
  • @sᴜʀᴇsʜᴀᴛᴛᴀ 你能解决我的困惑吗?为什么我们需要/使用 servlet?
  • 短答案是过滤请求,长答案最迟需要一个小时来解释;) 始终阅读官方文档
  • @sᴜʀᴇsʜᴀᴛᴛᴀ 你能给我Servlets的官方链接吗?或任何可以消除我困惑的链接。自从 2 天以来,我真的在努力阅读以清除,为什么我们使用过滤器但仍然感到困惑.. -_-

标签: java jsp session servlets


【解决方案1】:

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

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

在引入第 251 个 servlet 时,您很有可能忘记添加该检查。

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

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

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

【讨论】:

  • @JBNizat,当我阅读过滤器在 servlet 之前自动调用时,但是假设我有 2 个或更多过滤器,它们是如何连接到 servlet 的?表示为哪个 servlet 调用了哪个过滤器?
  • 就像 servlet 映射到 URL 一样,过滤器也是。您还可以将过滤器映射到 servlet,这意味着每当对该 servlet 发出请求时都会调用该过滤器。
  • 拥有一个过滤器比拥有 250 个 servlet 更好是一场噩梦。
  • 我希望你可以链接过滤器(即有多个)。
  • 我会补充一点,在目标Servlet之前和之后调用过滤器。
【解决方案2】:

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

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

【讨论】:

  • 假设我有 servlet A 和 Filter B 我如何映射它们,当调用 Servlet A 然后自动调用 Filter B
  • 映射它们/* 意味着一切
  • @RomanC 但是如果我使用任何其他地图而不是/* 那么呢?该过滤器将只为该网址调用?
  • 对匹配过滤器映射模式的 url 调用过滤器。
  • @BoristheSpider 不正确。过滤器可以映射到 servlet。引用规范:过滤器可以使用 元素与 servlet 关联
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-31
    相关资源
    最近更新 更多