Spark在过滤两次之前运行

时间:2017-02-13 00:56:03

标签: java spark-java

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

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

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

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

调试,我发现带有路径的过滤器被描述为SparkUtils类中声明的+/*paths

有两个问题:

  1. 如何禁用该行为?
  2. 声明为+/*paths的过滤器的用途是什么?
  3. 我认为过滤器被调用两次的原因是因为我按照here所述的步骤启用了CORS 。无论如何,我需要使用CORS,但被调用两次的过滤器在我的场景中是一个问题。

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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

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