spray authenticate指令返回不同的HTTP状态代码

时间:2015-05-15 08:52:10

标签: scala rest authentication spray spray-dsl

我正在使用authenticate指令在spray.io 1.3.2中对post请求进行基本身份验证。我的代码如下:

  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
    }

这完全正常,授权状态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级别授权的原因是我想让每个版本都受到不同密码的保护。有没有办法如何实现这一目标?链接指令的最佳做法是什么?

我想遵循DRY原则。

由于

0 个答案:

没有答案