Jersey 无法将ResourceInfo注入ContainerRequestFilter

Jersey 无法将ResourceInfo注入ContainerRequestFilter,jersey,guice,grizzly,Jersey,Guice,Grizzly,我正在尝试实现一个ContainerRequestFilter来检查一些东西。最终,它将授权一个令牌,但我还没有到那里。过滤器运行在Grizzly HTTP服务器(Grizzly 2.3.4)上,位于JAX-RS资源(Jersey 2.0)前面。我也在使用Guice 3.0 当我尝试将javax.ws.rs.container.ResourceInfo注入过滤器时,它是空的 import javax.ws.rs.container.ContainerRequestContext; import

我正在尝试实现一个ContainerRequestFilter来检查一些东西。最终,它将授权一个令牌,但我还没有到那里。过滤器运行在Grizzly HTTP服务器(Grizzly 2.3.4)上,位于JAX-RS资源(Jersey 2.0)前面。我也在使用Guice 3.0

当我尝试将javax.ws.rs.container.ResourceInfo注入过滤器时,它是空的

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ResourceInfo;
import javax.ws.rs.core.Context;
import java.io.IOException;

public class MyRequestFilter implements ContainerRequestFilter {

    @Context
    private ResourceInfo resourceInfo;

    public void filter(ContainerRequestContext containerRequestContext) throws IOException {

        String method = containerRequestContext.getMethod();
        System.out.println("method = " + method);

        if("OPTIONS".equals(method)) return;

        System.out.println("DO SECURITY");
    }
}
将请求注入到JAX-RS资源中,注入是成功的,我可以使用它


我做错了什么?

要在
ContainerRequestFilter
中启用注入,必须将其注释为
@Provider
,然后它才能工作

@Provider
public class MyRequestFilter implements ContainerRequestFilter {

    @Context
    private ResourceInfo resourceInfo;

    ...
}

嘿我相信您所做的是特定于资源的身份验证,对吗?您的方法是可行的,但是您通常会首先使用动态特性实现该特性。我举了一个例子,如果您感兴趣,请看一看:(不要被问题中的dropwizard吓到,它为generic jersey提供了答案)如果您需要访问ResourceInfo,然后对其应用筛选器,我建议您尝试DynamicFeature。我在这里提到的问题有一个关于如何使用这些功能的解决方案。我在没有ResourceInfo的情况下进行了身份验证