@ Inject не работает для AuthFilter в Guice + Jersey2 - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь использовать Guice для вставки зависимостей в мой пользовательский AuthFilter, который реализует ContainerRequestFilter. Моя цель - иметь AuthenticationFilter, который применяется к указанному c ресурсу. @Inject отлично работает для классов Resource, но не для класса Authfilter.

Фильтр аутентификации выглядит так:

public class MyApiAuthFilter implements ContainerRequestFilter {
    @Inject
    private InjectableResource injectableresource;
    @Override
    public void filter(ContainerRequestContext request) {
     //Filter Logic
   }
}

Так я регистрирую мост authfilter и guice-hk2

public class MyApplication extends ResourceConfig {

    @Inject
    public MyApplication(ServiceLocator serviceLocator) {
        register(MyApiAuthFilter.class);

        register(new ContainerLifecycleListener() {
            public void onStartup(Container container) {
                ServletContainer servletContainer = (ServletContainer)container;
                GuiceBridge.getGuiceBridge().initializeGuiceBridge(serviceLocator);
                GuiceIntoHK2Bridge guiceBridge = serviceLocator.getService(GuiceIntoHK2Bridge.class);
                Injector injector = (Injector) servletContainer.getServletContext().getAttribute(Injector.class.getName());
                guiceBridge.bridgeGuiceInjector(injector);
            }
            public void onReload(Container container) {

            }
            public void onShutdown(Container container) {
            }
        });

    }

InjectableResource - это класс реализации для InjectableResourceInterface. Я аннотировал InjectableResourceInterface с аннотацией @ImplementedBy.

Я получаю ошибку запуска. Журнал ошибок:

WARN The following warnings have been detected: WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 3
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=InjectableResource,parent=MyApiAuthFilter,qualifiers={},position=-1,optional=false,self=false,unqualified=null,1601756706)
    at org.jvnet.hk2.internal.ThreeThirtyResolver.resolve(ThreeThirtyResolver.java:75)
    at org.jvnet.hk2.internal.ClazzCreator.resolve(ClazzCreator.java:212)
    at org.jvnet.hk2.internal.ClazzCreator.resolveAllDependencies(ClazzCreator.java:235)
    at org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:358)
    at org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:487)
    at org.jvnet.hk2.internal.SingletonContext$1.compute(SingletonContext.java:83)

Есть ли обходной путь, чтобы @Inject также работал для AuthFilter?

...