Я никогда не использовал BasicAuth in Spray, поэтому я не уверен, что это будет полный ответ, но я надеюсь, что это поможет вам.
Сначала. в спрее есть отличный spray-testkit, написанный на вершине akka testkit. Вы обязательно должны проверить тест SecurityDirectives
на github, это покажет вам, как протестировать базовую аутентификацию. Небольшой пример, чтобы сделать это проще:
Что касается вашего примера маршрута, я бы лучше изменить к следующему:
val myRoute =
(path("secured") & get) {
authenticate(BasicAuth(myUserPassAuthenticator _, realm = "secure site")) {
userName => complete(s"The user is '$userName'")
}
}
}
Добавление get
директивы будет указать, что этот маршрут ожидает Get
запрос и sealRoute
является устаревшая причина RejectionHandler
и ExceptionHandler
предоставляются неявно с runRoute
. Он используется только в тестах, если вы хотите проверить исключения/отклонения.
Теперь в ваших тестах вы должны построить AUTH объекты, аналогичные испытания одного:
val challenge = `WWW-Authenticate`(HttpChallenge("Basic", "Realm"))
val doAuth = BasicAuth(UserPassAuthenticator[BasicUserContext] { userPassOption ⇒
Future.successful(Some(BasicUserContext(userPassOption.get.user)))
}, "Realm")
И проверить случай:
"simple auth test" in {
Get("security") ~> Authorization(BasicHttpCredentials("Alice", "")) ~> {
authenticate(doAuth) { echoComplete }
} ~> check { responseAs[String] === "BasicUserContext(Alice)" }
}
В Get("security")
указывает, что ваш тест отправит Get
запрос на "/ security", затем добавьте Authorization
к запросу на тест, некоторое действие и часть check
для проверки запроса.
Я никогда не пытался протестировать BasicAuth, поэтому могут быть некоторые ошибки.
В дополнение к отличному ответу AlexIv вы должны прочитать, как работает базовая аутентификация HTTP. Он не использует параметры запроса, а HTTP-заголовки для аутентификации. Возможно, это то, чего вам не хватает. Чтобы попробовать это в браузере, используйте этот синтаксис: 'http: // user @ mydomain/secure'. Затем браузер должен указать вам пароль для ввода пароля. – jrudolph