2015-01-16 6 views
1

관리자 특정 경로와 그렇지 않은 경로가 있습니다. 스프레이 경로에 대해 음수 경로 일치 지정

내 코드에서 아래에있다 : 그렇지 않은 경우

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

securedRoutes는 공공 직면하고 로그인 한 사용자를 확인 같은 추가적인 로직을 수행하고이를 거부 관리자 URL을 반면 내부 LDAP로 보호되므로 이러한 검사가 필요하지 않습니다.

내가 가진 문제는 누군가 "/ admin/mispelt_url"을 입력 할 때, 관리 경로를 충족시키지 못하고 보안 된 경로를 시도 할 때 발생합니다. 이 시점에서, 사용자가 로그인되어 있는지 확인하려고, 그들은 로그인 할 필요가 오류를 반환

내가 원하는 것은 :.

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

는 경로가 있습니까 이것에 대한 메커니즘을 매칭? docs에서

+1

''관리자 ''를 사용해 보셨습니까? '? – jrudolph

답변

2

, 당신은

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. 

예 "관리자 없습니다"라고 unary_!을 사용할 수 있습니다 - 따라서

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

, 당신은 (안하지만 테스트)

val route = pathPrefixTest("admin") { statusRoute ~ statsRoute } ~ pathPrefixTest(!"admin") {securedRoutes} 
할 수 있어야
+0

완벽! 나는 그것을 docs에서 놓쳤음에 틀림 없다. –