我通过~
方法构建路线。我的一些路由被authenticate
指令包围,在某些情况下返回拒绝。我在runRoute
方法的范围内有一个隐式拒绝处理程序。
如何将此指令仅应用于此指令包围的路由?在rejectionHandler中,我执行重定向到未被authenticate指令包围的路径。在调试中我发现第二个请求(重定向后)也通过我的contextAuthenticator
修改
使用authenticate
指令
val securedRoutes = authenticate(myContextAuthenticator) { implicit user =>
route1 ~
route2
}
此处myContextAuthenticator
的类型为ContextAuthenticator[User]
和receive
方法
def receive = runRoute {
otherRoutes ~ securedRoutes
}
答案 0 :(得分:2)
隐式拒绝处理程序适用于不可恢复的全局拒绝,应该转换相应的HTTP响应,如400或404.
但是,如果您需要处理特定于路由的拒绝,在您的情况下通过身份验证的路由,则喷涂handleRejections指令。
简单的用法就是这样:
val authenticatedRoute = handleRejections(myAuthenticatorRejectionHandler) &
authenticate(myContextAuthenticator)
val securedRoutes = authenticatedRoute { implicit user =>
route1 ~
route2
}