【问题标题】:Spark WS Framework Filter being called twiceSpark WS 框架过滤器被调用两次
【发布时间】:2018-08-06 05:55:30
【问题描述】:

我打算使用 before 过滤器添加尾部斜杠以及使用 before 过滤器来处理某些端点上的身份验证。

这是我的路由代码:

// Add filter to all requests which adds a trailing slash if it is missing //
before("*", Filters.addTrailingSlashes);
path("/api", () -> {
    // Authentication Intercept //
    before("/*", AuthenticationIntercept.authenticationIntercept);

    // Sampling Endpoints //
    get(Path.Web.SAMPLES_FETCH_LATEST, SamplingController.fetchLatestSamples, new JsonTransformer());
    get(Path.Web.SAMPLES_FETCH_FOR_DEVICE, SamplingController.getLatestSamplesForDevice, new JsonTransformer());
});

然后我点击以下端点:

localhost:4567/api/samples/10

发生的情况是首先调用 addTrailingSlashes。然后调用身份验证过滤器,然后再次调用 addTrailingSlashes,将 localhost:4567/api/samples/10/ 作为请求端点,最后再次调用身份验证过滤器。

这是预期的行为吗?我想要发生的是 addTrailingSlashes 被调用一次添加斜杠,然后转发一次请求,以便身份验证过滤器只被调用一次。

任何想法都将不胜感激。

谢谢, 内森

【问题讨论】:

    标签: java rest spark-framework


    【解决方案1】:

    我遇到了同样的问题,但使用了另一种类型的过滤器。事实证明,浏览器进行了两次调用,第二次调用触发过滤器的根 (/favicon.ico) 上的 favicon.ico。

    我没有在我的应用程序的根路径上配置任何服务,因此似乎为所有调用触发了过滤器,即使是那些未映射的调用。

    我通过使用未映射的其他路径验证了,尝试类似:

    http://yourdomain.com/aaa/bbb

    这个调用也让我的过滤器触发了两次。第一个到不存在的服务,一个到 favicon.ico。

    使用像 Fiddler 之类的 http 监控软件来查看调用是很有帮助的。

    在过滤器中检查 favicon 大小写并忽略它是很容易的。要检查是否对有效服务进行了调用,需要做更多的工作。也许有更好的方法来做到这一点。

    【讨论】:

      猜你喜欢
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 2019-01-04
      • 1970-01-01
      • 2013-10-03
      相关资源
      最近更新 更多