如何将authenticate指令仅应用于少数几个路由

时间:2016-03-02 11:17:47

标签: scala spray

我通过~方法构建路线。我的一些路由被authenticate指令包围,在某些情况下返回拒绝。我在runRoute方法的范围内有一个隐式拒绝处理程序。

如何将此指令仅应用于此指令包围的路由?在rejectionHandler中,我执行重定向到未被authenticate指令包围的路径。在调试中我发现第二个请求(重定向后)也通过我的contextAuthenticator

修改 使用authenticate指令

的示例
val securedRoutes = authenticate(myContextAuthenticator) { implicit user =>
  route1 ~
  route2  
}

此处myContextAuthenticator的类型为ContextAuthenticator[User]

receive方法

def receive = runRoute {
    otherRoutes  ~ securedRoutes
}

1 个答案:

答案 0 :(得分:2)

隐式拒绝处理程序适用于不可恢复的全局拒绝,应该转换相应的HTTP响应,如400或404.

但是,如果您需要处理特定于路由的拒绝,在您的情况下通过身份验证的路由,则喷涂handleRejections指令。

简单的用法就是这样:

val authenticatedRoute = handleRejections(myAuthenticatorRejectionHandler) &
  authenticate(myContextAuthenticator)

val securedRoutes = authenticatedRoute { implicit user =>
  route1 ~
  route2  
}