火花中的URL模式

Pab*_*mez 9 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);
        }
    });
Run Code Online (Sandbox Code Playgroud)

但是当我进入时,这当然不会执行 /foo

我尝试了以下但没有运气:

/foo* /foo.* /foo/

反正有没有实现这个目标?或者也许使用URL列表?这样我就可以将两个url分配给同一个过滤器.

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

Man*_*ish 7

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

RouteEntry代码将给定的模式和给定的URL分隔为"/"字符,然后为每个组件查找"匹配"(相等或通配符).

这是一个更详细的解释:

url /foo/blah有2个部分(在上面链接的RouteEntry代码的术语中),而/foo有1个部分.对于与第一个匹配的模式,它必须有2个部分:/foo/*是唯一有意义的部分.但是这个模式有2个部分,/foo如果检查第49行和第78行,则会失败.唯一的特殊情况是第71行的黑客攻击,它应该使模式/foo/*匹配url /foo/,但不是/foo.