火花中的URL模式

时间:2015-01-29 15:13:11

标签: java url-routing spark-java

我正在尝试制作符合以下网址的过滤条件:

/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分配给同一个过滤器。

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

1 个答案:

答案 0 :(得分:7)

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

RouteEntry代码拆分给定的模式,并在' /'字符,然后寻找"匹配" (每个组件的(相等或通配符)。

这里有一个更详细的解释:

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