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
。
我正在尝试制作一个符合以下 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
。