指定喷雾路线的负路径匹配

Specify negative path match for spray routes

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

我的代码中有以下内容:

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

securedRoutes public 面临并执行其他逻辑,例如检查用户是否已登录,如果未登录则拒绝,而管理 url 受内部 LDAP 保护,因此不需要这些检查.

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

我想要的是:

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

这个有路径匹配机制吗?

docs开始,你可以用unary_!说"not admin"

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}