我正在映射过滤器以在登录前检查一些必填字段。我的代码如下:
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
。
有两个问题:
+/*paths
的过滤器的用途是什么?我认为过滤器被调用两次的原因是因为我按照here所述的步骤启用了CORS 。无论如何,我需要使用CORS,但被调用两次的过滤器在我的场景中是一个问题。
答案 0 :(得分:1)
我认为您不需要使用过滤器。在需要检查某些内容时使用过滤器,在不同的情况下......
在您的情况下,您需要在POST请求时检查正文(例如,我不知道您的具体情况)
正如您所提到的那样,由于OPTIONS和POST请求,该过滤器被调用两次。
您应该做的是将验证移至您收到请求的方法。例如:
Spark.post("/login", (req, res) -> {
// validate..
// do action..
});
如果你真的需要保留过滤器,另一个选择是检查过滤器中的请求方法,并将验证仅应用于POST过程,而不是OPTIONS过程。