Я пытаюсь использовать 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?