Java Vert.x Auth-缺少权限将产生500而不是403

Java Vert.x Auth-缺少权限将产生500而不是403,java,authentication,authorization,vert.x,Java,Authentication,Authorization,Vert.x,我正在用Java实现我的AuthHandler,它与添加到每个路由的正常权限一起工作。它工作得很好-它可以检测用户是否未通过必填字段,并可以告诉用户是否允许访问路由。但是,如果我试图访问一个基于缺少权限的禁止路由,vert.x将以500-内部服务器错误而不是403-禁止响应 为什么会这样?我该如何修复它 下面是一些可能会有所帮助的代码片段 //MyUserImpl @凌驾 受保护的void doIsPermitted(字符串权限、处理程序resultHandler){ //TODO:调用令牌以使

我正在用Java实现我的AuthHandler,它与添加到每个路由的正常权限一起工作。它工作得很好-它可以检测用户是否未通过必填字段,并可以告诉用户是否允许访问路由。但是,如果我试图访问一个基于缺少权限的禁止路由,vert.x将以500-内部服务器错误而不是403-禁止响应

为什么会这样?我该如何修复它

下面是一些可能会有所帮助的代码片段

//MyUserImpl
@凌驾
受保护的void doIsPermitted(字符串权限、处理程序resultHandler){
//TODO:调用令牌以使用crn和iamtoken检查权限
if(this.token.contains(authority)){
resultHandler.handle(Future.succeedFuture(true));
}否则{
log.info(“用户未授权”、令牌、权限);
resultHandler.handle(Future.failedFuture(新授权异常(授权));
}
}
//MyAuthProviderImpl
@凌驾
公共无效身份验证(JsonObject authInfo、处理程序resultHandler){
字符串标记=authInfo.getString(“iamToken”);
if(此.validate(令牌)){
resultHandler.handle(Future.succeededFuture(newtaskUserImpl(令牌));
}否则{
log.info(“无法验证用户”,令牌);
resultHandler.handle(Future.failedFuture(new AuthenticationException());
}
}
//MyAuthHandlerImpl
公共无效解析凭据(RoutingContext ctx,处理程序){
此.parseAuthorization(ctx,false,parseAuthorization->{
if(parseAuthorization.failed()){
log.info(“未提供身份验证令牌”);
handler.handle(Future.failedFuture(parseAuthorization.cause());
最终字符串标记=parseAuthorization.result();
handler.handle(Future.succeededFuture(
新的JsonObject()
.put(“iamToken”,iamToken)
));
});
}

这可能是因为当未提供权限时,链中的某个位置会出现nullpointer异常吗?例如,iamToken为null,这可能导致MyUserImpl this.token.contains中出现异常…?这很可能。有没有好的方法通过此链进行调试?我尝试一步一步地进行调试,但没有找到任何错误hr除了我在处理程序回调中传回的异常之外,还有自己的异常。如果已经处理失败,为什么要调用
parseAuthorization.result();
并使用successed进行处理?忘记了}和
else
块?堆栈中没有回答问题的所有代码。是否尝试router.errorHandler(500,rcxt->{})查看rctx.failure()?