Вопрос по java, aop, jersey, guice – Метод перехвата в Джерси с использованием Guice AOP

5

Можно ли использовать Guice AOP для перехвата аннотированного метода на ресурсе Джерси?

У меня есть успешно настроенная интеграция Guice, работающая с Джерси в отношении внедрения зависимостей без каких-либо проблем, однако мой сконфигурированный перехватчик вообще не перехватывает мой аннотированный метод.

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
    }
}
Спасибо, да, это также вызвало проблемы в то время. Здесь стоит отметить Kynth
Поздно на вечеринку, но похоже@BindingAnnotation также отсутствует вRequiredAuthority. Paul Bellora

Ваш Ответ

1   ответ
5

Похоже, что configureServlets () не вызывает:

bind(TempResource.class);
Та же проблема может возникнуть при обработке @Transactional в Google-Persist
Спасибо, это была пропущенная привязка (TempResource.class), у меня сложилось впечатление, что параметр PROPERTY_PACKAGES будет сканировать пакет на наличие ресурсов. Мне не нужен @Singleton в конце концов. Kynth

Похожие вопросы