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 - 要发送回客户端的响应。
我错过了什么?
我错过了“返回”关键字:
if (authorizationHeader == null || !authorizationHeader.startsWith("Bearer ")) {
requestContext.abortWith(Response.status(Response.Status.UNAUTHORIZED).build());
return;
}
Run Code Online (Sandbox Code Playgroud)
我在这里找到了解决方案- 我猜文档中的句子有误导性:
此方法中断过滤器链处理并将提供的响应返回给客户端
我认为包括“回报”。
| 归档时间: |
|
| 查看次数: |
2442 次 |
| 最近记录: |