Spark WS Framework Filter被调用两次

问题描述 投票:6回答:1

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

这是我的路由代码:

// 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());
});

然后我点击以下端点:

本地主机:4567 / API /样品/ 10

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

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

任何想法都将非常感激。

谢谢,内森

java rest spark-framework
1个回答
2
投票

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

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

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

http://yourdomain.com/aaa/bbb

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.