我正在绑在使用前过滤器上添加后斜线以及在某些端点上处理身份验证的前过滤器。
这是我的路由代码:
// 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首先被调用。然后调用身份验证过滤器,然后这次使用Localhost:4567/api/samples/10/作为请求端点,然后再次调用身份验证过滤器。
> >这是预期的行为吗?我想发生的是,一旦添加斜线,就会调用AddTrailingSlashes,然后一次将请求转发一次,以便仅调用身份验证过滤器一次。
任何想法都将不胜感激。
谢谢内森
我遇到了相同的问题,但是另一种类型的过滤器。事实证明,浏览器拨打了两个呼叫,第二个呼叫是在触发过滤器的root(/favicon.ico(上获得favicon.ico的第二个呼叫。
我没有在我的应用程序中的根路径上配置任何服务,因此似乎对所有呼叫触发了过滤器,即使是未映射的呼叫。
我通过使用其他未映射的路径来验证,尝试类似:
http://yourdomain.com/aaa/bbb
此通话确实使我的过滤器触发了两次。第一个获得不存在的服务,一个获得favicon.ico。
使用诸如提琴手之类的http-monitoring软件或类似的呼叫。
很容易检查过滤器中的Favicon盒并忽略它。要检查对有效服务的呼叫是否有所工作。也许有一种更好的方法。