2012-06-11 6 views
5

Ist es möglich, Guice AOP zu verwenden, um eine kommentierte Methode auf einer Jersey-Ressource abzufangen?Methode Abfangen in Jersey mit Guice AOP

Ich habe eine erfolgreich konfigurierte Guice Integration mit Jersey in Bezug auf Dependency Injection ohne Probleme, aber meine konfiguriert Interceptor ist nicht abfangen meine annotierte Methode überhaupt.

web.xml

<listener> 
    <listener-class>my.package.GuiceConfig</listener-class> 
</listener> 
<filter> 
    <filter-name>guiceFilter</filter-name> 
    <filter-class>com.google.inject.servlet.GuiceFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>guiceFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

GuiceConfig Konfigurationsmodul

public class GuiceConfig extends GuiceServletContextListener { 

@Override 
protected Injector getInjector() { 
    return Guice.createInjector(new JerseyServletModule() { 

      @Override 
      protected void configureServlets() { 

       bindInterceptor(Matchers.any(), 
           Matchers.annotatedWith(RequiredAuthority.class), 
           new AuthorisationInterceptor()); 

       Map<String, String> params = new HashMap<String, String>(); 
       params.put(JSP_TEMPLATES_BASE_PATH, "/WEB-INF/jsp"); 
       params.put(FEATURE_FILTER_FORWARD_ON_404, "true"); 
       params.put(PROPERTY_PACKAGES, "my.service.package"); 

       filter("/*").through(GuiceContainer.class, params); 
      } 
     }); 
    } 
} 

RequiredAuthority Annotations

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface RequiredAuthority { 
    String value(); 
} 

AuthorisationInterceptor Aspekt

public class AuthorisationInterceptor implements MethodInterceptor { 

    public Object invoke(MethodInvocation methodInvocation) throws Throwable { 

     // Allow invocation to process or throw an appropriate exception 
    } 
} 

TempResource JAX-RS-Ressourcenklasse

@Path("/temp") 
public class TempResource { 

    @GET 
    @Produces(MediaType.APPLICATION_JSON) 
    @RequiredAuthority("PERMISSION") 
    public String getTemp() { 

     // Return resource normally 
    } 
} 
+1

spät zur Party, aber es sieht aus wie ['@ BindingAnnotation'] (http://google-guice.googlecode.com/git/javadoc/com/google/inject/BindingAnnotation. html) fehlt auch in 'RequiredAuthority'. –

+0

Danke, ja das hat auch zu der Zeit ein Problem verursacht. Es lohnt sich, hier zu notieren. – Kynth

Antwort

5

Sieht aus wie configureServlets() ruft nicht:

bind(TempResource.class); 
+0

Danke, es war die Bindung (TempResource.class), die ich vermisste, ich hatte den Eindruck, dass der Parameter PROPERTY_PACKAGES das Paket nach Ressourcen durchsuchen würde. Ich brauchte das @Singleton am Ende nicht. – Kynth

+0

Das gleiche Problem kann mit @Transactional der Google-Persist-Behandlung auftreten –