2017-02-13 9 views
1

ログインする前にいくつかの必須フィールドを確認するフィルタをマッピングしています。私のコードは次のようになります。私のアプリが動作しているときスパークがフィルタの前に2回実行されています

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

beforeフィルターを2回と呼ばれています。

それぞれで、reqは異なるインスタンスです。最初のものでは、req.body()の内容は空文字列です。 2番目のコンテンツでは、コンテンツはクライアントアプリケーションから送信されたものです。

デバッグでは、パスが+/*pathsと記述されており、SparkUtilsクラスに宣言されています。

二つの質問があります。

  1. は、私がその動作を無効にするにはどうすればよいですか?
  2. +/*pathsと宣言されたフィルタの目的は何ですか?私は、フィルタのその理由は二回呼び出されていると信じてい

hereが説明するように、私は有効CORSの手順に従ってきたので、あります。とにかく、私はCORSを使う必要がありますが、私のシナリオでは2回呼び出されるフィルターが問題でした。

答えて

1

フィルタを使用する必要はありません。さまざまな場合に何かをチェックする必要があるときにフィルタが使用されます。

あなたのケースでは、POST要求時にボディをチェックする必要があります(たとえば、あなたのケースが正確ではない)

上記のフィルタは、OPTIONS要求とPOST要求のために2回呼び出されています。

あなたがすべきことは、リクエストを受け取る方法に検証を移すことです。以下のような例何かについて:

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

別のオプション、あなたが本当にフィルターを維持する必要がある場合は、OPTIONSつのフィルタに要求方式をチェックして、ちょうどPOST 1に検証を適用し、しないことです。

+0

あなたがお勧めしたように、 'if(HttpMethod.post.name()。equalsIgnoreCase(req.requestMethod()))'を使ってチェックしました。私はそれがエレガントなのかどうかは分かりませんが、それは解決します。 – josivan

+0

@ josivanはい、それは動作しますが、あなたが私に尋ねると、私は個人的にそれがエレガントではないと思う –

関連する問題