Method interception in Jersey using Guice AOP
aop, guice, java, jersey
Solution
Looks like configureServlets() isn't calling:
bind(TempResource.class);
Problem
Is it possible to use Guice AOP to intercept an annotated method on a Jersey resource? I have a successfully configured Guice integration working with Jersey with respect to Dependency Injection without any problems, however my configured Interceptor is not intercepting my annotated method at all. 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 configuration module ``` 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 annotation ``` @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface RequiredAuthority { String value(); } ``` AuthorisationInterceptor aspect ``` public class AuthorisationInterceptor implements MethodInterceptor { public Object invoke(MethodInvocation methodInvocation) throws Throwable { // Allow invocation to process or throw an appropriate exception } } ``` TempResource JAX-RS resource class ``` @Path("/temp") public class TempResource { @GET @Produces(MediaType.APPLICATION_JSON) @RequiredAuthority("PERMISSION") public String getTemp() { // Return resource normally } } ```