2017-02-13 4 views
1

Ich bin ein Filter zuordnen, um einige erforderliche Felder vor der Anmeldung zu überprüfen. Mein Code sieht so aus:Spark läuft vor dem Filter zweimal

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

Wenn meine Anwendung läuft, die before Filter zweimal aufgerufen wird.

In jedem der req sind verschiedene Instanzen. In der ersten ist der Inhalt von req.body() eine leere Zeichenfolge. Im zweiten Fall ist der Inhalt genau das, was ich von meiner Client-Anwendung gesendet habe.

Debugging, ich habe einen Filter mit Pfad gefunden wird beschrieben als +/*paths in SparkUtils Klasse deklariert.

Es gibt zwei Fragen:

  1. Wie kann ich dieses Verhalten zu deaktivieren?
  2. Was ist der Zweck des Filters als +/*paths deklariert?

Ich glaube, dass aufgrund der Filter zweimal aufgerufen wird, ist, weil ich die Schritte zu Aktiviert CORS wie here befolgt haben. Wie auch immer, ich muss CORS verwenden, aber der Filter, der zweimal aufgerufen wird, war ein Problem in meinem Szenario.

Antwort

1

Ich glaube nicht, dass Sie einen Filter verwenden müssen. Ein Filter wird verwendet, wenn Sie etwas überprüfen müssen, in verschiedenen Fällen.

In Ihrem Fall müssen Sie den Körper überprüfen, wenn es die POST-Anfrage ist (zum Beispiel weiß ich nicht, was genau Ihr Fall ist)

Dieser Filter, wie Sie erwähnt haben, wird zweimal wegen der OPTIONEN und der POST-Anfrage aufgerufen.

Sie sollten die Validierung in die Methode verschieben, in der Sie die Anforderung erhalten. Zum Beispiel so etwas wie:

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

Eine weitere Option, wenn Sie wirklich die Filter halten müssen, ist die Request-Methode in dem Filter zu überprüfen, und wenden Sie die Validierung nur die POST ein, und die Optionen nicht ein.

+0

Ich tat, wie Sie vorschlagen, die Suche nach 'if (HttpMethod.post.name(). EqualsIgnoreCase (req.requestMethod()))'. Ich bin mir nicht sicher, ob es elegant ist, aber es löst. – josivan

+0

@josivan ja, es wird funktionieren, aber wenn Sie mich fragen, ich persönlich denke, es ist nicht elegant –