Interception de JAX-RS Demande: Enregistrer un ContainerRequestFilter avec tomcat

Je suis d'essayer d'intercepter une requête à mon JAX-RS webservice par un ContainerRequestFilter. Je veux l'utiliser avec une mesure d'annotation, de sorte que je peux décorer certaines méthodes du service web. Cela devrait me permettre de traiter les demandes de ces méthodes sur la base des informations qu'ils sont émis sur un canal sécurisé
ou pas, avant l'exécution de la méthode.

J'ai essayé différentes approches, fouillée à plusieurs postes, puis mis en œuvre principalement basé sur la réponse par Alden dans ce post.
Mais je ne peux pas le faire fonctionner.

J'ai une méthode de test de mon webservice décorées avec mes annotations personnalisées Ssl.

@POST
@Path("/test")
@Ssl
public static Response test(){      
    System.out.println("TEST ...");
}

L'annotation ressemble à ceci:

@NameBinding
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.TYPE, ElementType.METHOD })
public @interface Ssl {}

Puis-je configurer un filtre de mise en œuvre

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.ext.Provider;

@Ssl
@Provider
public class SslInterceptor implements ContainerRequestFilter
{
    @Override
    public void filter(ContainerRequestContext requestContext) throws IOException
    {       
        System.out.println("Filter executed.");
    }
}

Mais le filtre n'est jamais exécutée, ni il se produit des messages d'erreur ou d'avertissement. La méthode de test fonctionne très bien, de toute façon.

Pour le résoudre, j'ai essayé d'enregistrer le filtre dans la web.xml comme décrit ici.

<servlet>
    <servlet-name>Jersey Web Application</servlet-name>
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

    <init-param>
      <param-name>com.sun.jersey.config.property.resourceConfigClass</param-name>
      <param-value>com.sun.jersey.api.core.PackagesResourceConfig</param-value>
    </init-param>

    <init-param>
      <param-name>com.sun.jersey.config.property.packages</param-name>
      <param-value>com.my.packagewithfilter</param-value>
    </init-param>

    <init-param>
        <param-name>com.sun.jersey.spi.container.ContainerRequestFilters</param-name>
        <param-value>com.my.packagewithfilter.SslInterceptor</param-value>
    </init-param>

    <init-param>  
      <param-name>jersey.config.server.provider.packages</param-name>  
      <param-value>com.my.packagewithfilter</param-value>
    </init-param>    

  </servlet>

Mais qui ne fonctionne pas. Ce qui me manque? Des idées comment faire pour que le filtre fonctionne? Toute aide est vraiment apprécié!

OriginalL'auteur tareq | 2014-02-04