加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 在定义路由指令时是否可以使用隐式参数?

发布时间:2020-12-16 18:52:22 所属栏目:安全 来源:网络整理
导读:我有一个指令,定义为 def allowedRoles(roles: UserRole*)(implicit login: Login): Directive0 = ??? 但我似乎无法在不必明确传入login参数的情况下使用它 def myRoutes(implicit req: HttpRequest,login: Login) = { path("example" / "path") { get { all
我有一个指令,定义为

def allowedRoles(roles: UserRole*)(implicit login: Login): Directive0 = ???

但我似乎无法在不必明确传入login参数的情况下使用它

def myRoutes(implicit req: HttpRequest,login: Login) = {
  path("example" / "path") {
    get {
      allowedRoles(Administrator) { // ← fails ?
        handleGet
      }
    }
  }
}

如果我尝试编译它失败,类型不匹配:

[error]  found   : akka.http.scaladsl.server.Route
[error]     (which expands to)  akka.http.scaladsl.server.RequestContext => scala.concurrent.Future[akka.http.scaladsl.server.RouteResult]
[error]  required: com.example.Login
[error]         allowedRoles(Administrator) { handleGet } }

如果我将标记的行更改为allowedRoles(管理员)(登录)然后它可以工作,但似乎我不应该这样做,我错过了什么?

解决方法

这是因为通过Scala规则,{handleGet}被认为是allowedRoles的第二个参数列表.要解决这个问题,请明确说明它实际上是Directive0.apply的参数:

allowedRoles(Administrator).apply { handleGet }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读