9

次の URL に一致するフィルターを作成しようとしています。

/foo/foo/*

したがって/foo/、基本ケースの下にあるものはすべて/foo

私はこのフィルターを持っています:

    Spark.before("/foo/*", (request, response) -> {
        String ticket = request.cookie("session");
        if (ticket == null) {
            Spark.halt(302);
        }
    });

しかし、もちろん、これは実行されません/foo

私は次のことを試しましたが、うまくいきませんでした:

/foo* /foo.* /foo/

これを達成する方法はありますか?それとも、URL のリストを使用するには? 両方の URL を同じフィルターに割り当てることができるようにします。

そして、関数を変数に格納して2回使用するとは言わないでください。まったくきれいではないと思います..

4

1 に答える 1

7

https://github.com/perwendel/spark/blob/1ecd428c8e2e5b0d1b8f221e9bf9e82429bd73bb/src/main/java/spark/route/RouteEntry.java#L31 (パス マッチングが行われる場所) によると、目的のようには見えません。することが可能です。

RouteEntry コードは、指定されたパターンと指定された URL を「/」文字で分割し、各コンポーネントの「一致」(等値またはワイルドカード) を探します。

より詳細な説明は次のとおりです。

URL/foo/blahには 2 つの部分があり (上記にリンクされている RouteEntry コードの用語で)、/foo1 つの部分があります。パターンが最初のパターンに一致するには、2 つの部分が必要です:/foo/*意味のある唯一の部分です。しかし、このパターンには 2 つの部分があり、49 行目と 78 行目の両方で if チェックが失敗/fooします。唯一の特殊なケースは、71 行目のハック/foo/*です。/foo//foo

于 2015-02-11T02:53:37.733 に答える