我正在使用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)```
但是我没有看到我的错误处理程序被调用,因此我无法以我的特定格式将错误消息发送回客户端。