Spark 是 运行 before filter 两次

Spark is running before filter twice

我正在映射一个过滤器以在登录前检查一些必填字段。我的代码如下所示:

before("/login", (req, res) -> {
    // do some things
    LOGGER.debug("before /login");
    LOGGER.debug("Request -> " + req);
    LOGGER.degub("body " + req.body());
}

当我的应用程序 运行 时,before 过滤器被调用两次。

每个 req 都是不同的实例。在第一个中 req.body() 的内容是一个空字符串。在第二个中,内容正是我从客户端应用程序发送的内容。

调试,我发现一个过滤器的路径被描述为 +/*pathsSparkUtils class 中声明。

有两个问题:

  1. 如何禁用该行为?
  2. 过滤器声明为 +/*paths 的目的是什么?

我认为过滤器被调用两次的原因是因为我按照 here 所述的步骤启用 CORS。无论如何,我需要使用 CORS,但是在我的场景中被调用两次的过滤器是个问题。

我认为您不需要使用过滤器。当你需要检查某些东西时使用过滤器,在不同的情况下..

在你的情况下,你需要在POST请求时检查正文(例如,我不知道你的具体情况是什么)

正如您提到的,由于 OPTIONS 和 POST 请求,该过滤器被调用了两次。

您应该做的是将验证移至接收请求的方法。例如:

Spark.post("/login", (req, res) -> {
    // validate..
    // do action..
});

如果您真的需要保留过滤器,另一种选择是检查过滤器中的请求方法,并将验证仅应用于 POST 一个,而不是 OPTIONS 一个。