ContainerRequestContext abortWith() 不会中止

Tim*_*Tim 4 rest jax-rs jakarta-ee

这是我的身份验证过滤器:

@Secured
@Provider
@Priority(Priorities.AUTHENTICATION)
public class SecuredFilter implements ContainerRequestFilter {

    @Override
    public void filter(ContainerRequestContext requestContext) {

        String authorizationHeader = requestContext.getHeaderString(HttpHeaders.AUTHORIZATION);
        if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
             requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
        }

        String token = authorizationHeader.substring("Bearer".length()).trim();
        // [...]
        }
}
Run Code Online (Sandbox Code Playgroud)

为什么在缺少标头时它不会中止并发回响应? 现在我在 authorizationHeader.substring 得到一个明显的 NPE ...

文件说:

void abortWith(响应响应)

使用响应中止过滤器链。此方法中断过滤器链处理并将提供的响应返回给客户端。提供的响应通过适用的响应过滤器链。参数: response - 要发送回客户端的响应。

我错过了什么?

Tim*_*Tim 5

我错过了“返回”关键字:

if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
     requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
     return;
}
Run Code Online (Sandbox Code Playgroud)

我在这里找到了解决方案- 我猜文档中的句子有误导性:

此方法中断过滤器链处理并将提供的响应返回给客户端

我认为包括“回报”。