如何在ContainerRequestFilter中检索请求的匹配资源

Joh*_*n B 12 java annotations jax-rs jersey

我正在使用JAX-RS/Jersey开发WebService.

我已经设置了一个ContainerRequestFilter,其目的是验证用户身份.我只需要通过身份验证保护一些路径,其余的都可以供所有人使用.

我想通过我的ContainerRequestFilter中的ExtendedUriInfo检索matchedResources/matchedResults,以便我可以检查路径是否应该受到保护.有没有办法创建一个在填充ExtendedUriInfo之后但在调用匹配的资源类和方法之前调用的过滤器?

Kev*_* L. 9

这是一个更一般的答案(例如,如果你正在使用另一个像CXF这样的jax-rs实现):

只需在过滤器类中添加以下内容作为实例变量:

@Context

ResourceInfo信息;

"javax.ws.rs.container.ResourceInfo是一个新的JAX-RS上下文,可以将其注入到过滤器和拦截器中,并检查哪些资源类和方法即将被调用. "

(来源:https://cwiki.apache.org/confluence/display/CXF20DOC/JAX-RS+Basics#JAX-RSBasics-ResourceInfo)

原来答案在这里


Art*_*hur 5

找到了使用ContainerRequestFilter的方法:

public void filter(ContainerRequestContext requestContext) {
    UriRoutingContext routingContext = (UriRoutingContext) requestContext.getUriInfo();
    ResourceMethodInvoker invoker = (ResourceMethodInvoker) routingContext.getInflector();
    Class<?> className = invoker.getResourceClass();
    Method methodName = invoker.getResourceMethod();
}
Run Code Online (Sandbox Code Playgroud)