Директива аэрозольной аутентификации возвращает разные коды состояния HTTP

Я пытаюсь выполнить базовую аутентификацию по запросу после публикации в spray.io 1.3.2 с использованием директивы authenticate. Мой код выглядит следующим образом:

  val route: Route = {
    pathPrefix("ato") {
      pathPrefix("v1") {
        path("orders" / "updateStatus") {
          post {
            authenticate(BasicAuth(userPasswordAuthenticator _, realm = "bd ato import api")) {
              user =>
                entity(as[String]) {e =>
                  complete {
                    s"Hello $e "
                  }
                }
            }
          }

        }
      }
    }
  }

  def userPasswordAuthenticator(userPass: Option[UserPass]): Future[Option[String]] =
    Future {
      if (userPass.exists(up => up.user == ato_import_v1_usr && up.pass == ato_import_v1_pwd)) Some("ato_v1")
      else None
    }

Это работает отлично, авторизованный Status Ok 200, неавторизованный 401. Однако, когда порядок директив изменяется следующим образом:

  val route: Route = {
    pathPrefix("ato") {
      pathPrefix("v1") {
        authenticate(BasicAuth(userPasswordAuthenticator _, realm = "bd ato import api")) {
          user =>
        path("orders" / "updateStatus") {
          post {
                entity(as[String]) {e =>
                  complete {
                    s"Hello $e "

                  }
                }
            }
          }

        }
      }
    }
  }

Я получаю статус 405, метод HTTP запрещен для несанкционированного доступа. Я не уверен, почему это происходит. С определенной точки зрения имеет смысл, путь не совпадает из-за отсутствия учетных данных и т. Д.

Может ли кто-нибудь уточнить это?

Причина, по которой я хотел поставить авторизацию на уровне v1, заключается в том, что я хотел сделать каждую версию защищенной разным паролем. Есть ли способ, как этого добиться? Какова лучшая практика в цепочечных директивах?

Я хотел бы следовать принципу СУХОЙ.

Спасибо

0 ответов

Другие вопросы по тегам