URL 火花中的图案

URL Pattern in spark

我正在尝试制作一个符合以下 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 分配给同一个过滤器。

并且请不要说将函数存储在变量中以便我使用它两次,因为我认为这根本不干净..

根据https://github.com/perwendel/spark/blob/1ecd428c8e2e5b0d1b8f221e9bf9e82429bd73bb/src/main/java/spark/route/RouteEntry.java#L31(路径匹配发生的地方),看起来你想做的事情是不可能的。

RouteEntry 代码将给定的模式和给定的 url 在 '/' 字符处拆分,然后为每个组件查找 "matches"(相等或通配符)。

这里有更详细的解释:

url /foo/blah 有 2 个部分(在上面链接的 RouteEntry 代码的术语中),而 /foo 有 1 个部分。对于匹配第一个的模式,它必须有 2 个部分:/foo/* 是唯一有意义的部分。但是这个模式有 2 个部分,这使得 /foo 在第 49 行和第 78 行都无法通过 if 检查。唯一的特殊情况是第 71 行的 hack,它应该使模式 /foo/* 匹配 url /foo/,但不是 /foo