2017-02-13 125 views
1

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

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的过滤器的用途是什么?

我相信滤波器因此被称为两次,是因为我已经按照步骤启用CORS描述here。无论如何,我需要使用CORS,但是被调用两次的过滤器在我的场景中是一个问题。

回答

1

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

在你的情况,你需要检查身体何时是POST请求(例如,我不知道你的情况究竟是什么)

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

你应该做的是将验证移到接收请求的方法。例如像:

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

另一种选择,如果你真的需要保留的过滤器,是检查请求方法的过滤器,并应用验证,只是POST一个,而不是一个选项。

+0

我按照你的建议做了,检查使用if(HttpMethod.post.name()。equalsIgnoreCase(req.requestMethod()))''。我不确定它是否优雅,但可以解决。 – josivan

+0

@ josivan是的,它会工作,但如果你问我,我个人认为它不是优雅的 –

相关问题