java - @Inject 不适用于 Guice + Jersey2 中的 AuthFilter
问题描述
我正在尝试使用 Guice 将依赖项注入到实现 ContainerRequestFilter 的自定义 AuthFilter 中。我的目标是拥有一个应用于特定资源的 AuthenticationFilter。@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 的实现类。我用 @ImplementedBy 注释对 InjectableResourceInterface 进行了注释。
我收到启动错误。错误日志:
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?
解决方案
推荐阅读
- powerbi - Power BI Filter Context - adding a measure to matrix then ignores all relationships
- laravel - how fix artisan error ? UnexpectedValueException
- rsyslog - 防止 pgbouncer 在 Centos 7 上记录到系统日志
- java - Scene builder GUI components do not look the same when I run the project from IntelliJ
- python - fxcmpy REST api 的连接问题
- c# - 如何使用 Foreach 循环将数据从数据表节点迭代到 treenode
- excel - Creating a macro which runs from the last row from which it was closed
- javascript - 如何将选择器添加到元素 HTML?
- python - Same table is extracted twice from a pdf by Camelot-py
- python - Run single folder of pytest tests in vscode