这是我的身份验证过滤器:
@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 ...
得到一个明显的NPEvoid abortWith(响应响应)
用a中止过滤器链 响应。此方法会中断过滤器链处理并返回 提供的响应回到客户端。提供的响应是 通过适用的响应过滤器链。参数:响应 - 响应被发送回客户端。
我错过了什么?
答案 0 :(得分:1)
我错过了“return”关键字:
if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
return;
}
我找到了解决方案here - 我猜文档中的句子具有误导性:
此方法会中断过滤器链处理并返回 向客户提供回复
我认为包括“回归”。