我正在使用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原则。
由于