jerseyguicegrizzly

Cannot inject ResourceInfo into ContainerRequestFilter


I'm trying to implement a ContainerRequestFilter that checks some stuff. Ultimately, it shall authenicate a token, but I'm not there yet. The filter runs on a Grizzly HTTP Server (Grizzly 2.3.4) and sits in front of a JAX-RS resource (Jersey 2.0). I am also using Guice 3.0.

When I'm trying to inject javax.ws.rs.container.ResourceInfo into the filter, it is null.

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");
    }
}

Injecting the request into a JAX-RS resource, the injection is successful and I can work with it.

What am I doing wrong?


Solution

  • To enable injection in ContainerRequestFilter you have to annotate it as @Provider, then it works

    @Provider
    public class MyRequestFilter implements ContainerRequestFilter {
    
        @Context
        private ResourceInfo resourceInfo;
    
        ...
    }