如何处理自定义动作引发的错误

时间:2018-10-06 08:31:16

标签: playframework-2.6

我正在使用Silhouette身份验证库。它提供了客户Action,可通过以下方式使用

def newQuestion = silhouette.SecuredAction.async(parse.json) {...}

在我的代码中,SecuredAction引发错误,因为客户端发送了一些不一致的数据。我该如何处理SecuredAction引发的错误?我的应用程序的逻辑位于{...}内,但是在命中我的应用程序的逻辑之前引发了错误。

我已经建立了一个自定义的错误处理程序类,但是没有被调用!

@Singleton
class CustomHttpErrorHandler extends HttpErrorHandler {

    def onClientError(request: RequestHeader, statusCode: Int, message: String) = {
      println("client error: request "+request+", statusCode: "+statusCode+", message:"+message)
      Future.successful(
        Status(statusCode)(Json.toJson(JsonResultError(message)))
      )
    }

    def onServerError(request: RequestHeader, exception: Throwable) = {
      println("server error: request: "+request+", exception: "+exception.getMessage)
      Future.successful(
        InternalServerError(Json.toJson(JsonResultError(exception.getMessage)))
      )
    }

}

到控制器的路由是

case POST(p"/new-question") =>{ 
      println("add question request");
      controller.newQuestion();
    }

我只看到add question request打印和来自Silhouette的调试打印

com.mohiva.play.silhouette.api.exceptions.AuthenticatorException: [Silhouette][jwt-authenticator] Error on parsing JWT token: eyJ... at com.mohiva.play.silhouette.impl.authenticators.JWTAuthenticator$$anonfun$unserialize$5.applyOrElse(JWTAuthenticator.scala:154)```  但是我没有看到我的错误处理程序被调用,因此我无法以我的特定格式将错误消息发送回客户端。

0 个答案:

没有答案