2015-01-16 59 views
1

我有一些管理员专用的路由,有些路由不是。为喷雾路径指定负值路径匹配

我有下面在我的代码:

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

的securedRoutes是面向公众的,做额外的逻辑就像检查用户登录,并拒绝他们,如果他们都没有,而管理网址是内部LDAP保护的,因此不需要这些检查。

我遇到的问题是,当有人键入“/ admin/mispelt_url”,它不符合管理路线,并尝试安全的。在这一点上,它会尝试检查,如果用户登录,并返回他们需要登录一个错误

我想是:

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

是否有路径这个匹配机制?

+1

你试过'“管理员”。!'? – jrudolph

回答

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} 
+0

完美!我一定在文档中错过了,tx。 –