【问题标题】:Akka HTTP Route Handling [duplicate]Akka HTTP 路由处理 [重复]
【发布时间】:2021-06-15 22:09:57
【问题描述】:

我有以下路线设置

 val routes = protectedRoute("wallet") { user =>
    concat {
      path("wallet" / "deposit") {
        get {
          completeEitherT(walletService.deposit(user._id, "dollars", 50))
        }
      }
      path("wallet") {
        get {
          completeEitherT(walletService.getForUser(user._id))
        }
      }
    }
  }

completeEitherT函数如下

def completeEitherT[T](t: EitherT[Future, DatabaseError, T])(implicit marsh: ToResponseMarshaller[T]): Route = {
    onSuccess(t.value) {
      case Left(x: DatabaseErrors.NotFound) =>
        logger.error(x.toString)
        complete(StatusCodes.NotFound)
      case Left(error) => complete(StatusCodes.InternalServerError)
      case Right(value) => complete(value)
    }
  }

protectedRoute 指令是:

def protectedRoute(permissions: String*): Directive1[User] = new Directive1[User] {
    override def tapply(f: (Tuple1[User]) => Route): Route = {
      headerValueByName("Authorization") { jwt =>
        Jwt.decode(jwt, jwtSecret, List(algo)) match {
          case Failure(_) =>
            logger.error("Unauthorized access from jwtToken:", jwt)
            complete(StatusCodes.Unauthorized)
          case Success(value) =>
            val user = JsonParser(value.content).convertTo[User]
            if (user.roles.flatMap(_.permissions).exists(permissions.contains)) f(Tuple1(user))
            else complete(StatusCodes.Forbidden)
        }
      }
    }
  }

我遇到的问题是,首先定义的路径在通过 Postman 调用时会导致 404。

The requested resource could not be found.

这不是来自completeEitherT 的响应,因为它没有记录错误

如何在同一个指令中定义两个或多个路径?

【问题讨论】:

    标签: scala jwt akka akka-http scala-cats


    【解决方案1】:

    请标记为重复,我在 Google 搜索中找不到此内容,但 SO 显示为相关。

    Answer

    基本上我在路径之间缺少~

    val routes = protectedRoute("wallet") { user =>
        concat {
          path("wallet" / "deposit") {
            get {
              completeEitherT(walletService.deposit(user._id, "dollars", 50))
            }
          } ~
          path("wallet") {
            get {
              completeEitherT(walletService.getForUser(user._id))
            }
          }
        }
      }
    

    【讨论】:

      猜你喜欢
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多