ContainerRequestContext abortWith()不会中止

时间:2017-08-02 10:01:16

标签: rest java-ee jax-rs

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

@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();
        // [...]
        }
}

为什么它不会中止并在标题丢失时发回响应? 现在我在authorizationHeader.substring ...

得到一个明显的NPE

documentation说:

  

void abortWith(响应响应)

     

用a中止过滤器链   响应。此方法会中断过滤器链处理并返回   提供的响应回到客户端。提供的响应是   通过适用的响应过滤器链。参数:响应    - 响应被发送回客户端。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

我错过了“return”关键字:

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

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

  

此方法会中断过滤器链处理并返回   向客户提供回复

我认为包括“回归”。