指定喷涂路径的负路径匹配

时间:2015-01-16 11:23:55

标签: scala spray

我有一些特定于管理员的路由,而另一些则不是。

我的代码中包含以下内容:

val route = pathPrefixTest("admin") { statusRoute ~ statsRoute } ~ securedRoutes

secureRoutes是面向公众的,并且执行其他逻辑,例如检查用户是否已登录,如果不是,则拒绝它们,而管理URL是内部LDAP保护的,因此不需要这些检查。

我遇到的问题是,当有人输入“/ admin / mispelt_url”时,它不符合管理路由,并尝试安全路由。此时,它会尝试检查用户是否已登录,并返回他们需要登录的错误。

我想要的是:

val route = pathPrefixTest("admin") { statusRoute ~ statsRoute } ~  **pathPrefixTest("NOT admin")** {securedRoutes}

这是否有路径匹配机制?

1 个答案:

答案 0 :(得分:2)

docs开始,您可以使用unary_!来表示"而不是管理员"

By prefixing a matcher with ! it can be turned into a PathMatcher0 that only
matches if the underlying matcher does not match and vice versa.

示例 -

// matches anything starting with "/foo" except for /foobar
pathPrefix("foo" ~ !"bar")

因此,您应该可以(不测试)

val route = pathPrefixTest("admin") { statusRoute ~ statsRoute } ~  pathPrefixTest(!"admin") {securedRoutes}