我试图使用Guice将依赖项注入到通过DynamicFeature注册的ContainerRequestFilter中。我还需要Jersey注入HttpServletRequest,我目前正在尝试通过@context实现这一点。这是在一个Dropwizard应用程序中。
我的最终目标是拥有一个通过DynamicFeature应用于特定资源的AuthenticationFilter。我的AuthenticationFilter有一些必须注入的依赖项,它还需要访问HttpServletRequest才能完成它的工作。这是Dropwizard项目的一部分,该模式基于Dropwizard的AuthDynamicFeature和AuthFilter,但经过修改以支持注入。
因此我的AuthenicationFilter如下所示:
public class AuthFilter implements ContainerRequestFilter {
@Context
private HttpServletRequest httpServletRequest;
@Context
private HttpServletResponse httpServletResponse;
@Inject
private InjectableResource injectableResource;
public void filter(ContainerRequestContext requestContext) throws IOException {
// Do Auth
}
}
我的DynamicFeature是这样的:
public class InjectableAuthDynamicFeature implements DynamicFeature {
// Have tried multiple methods to register fitlers: using Injector,
// using Provider and using the normal Class
@Inject
private Provider<AuthFilter> authFilterProvider;
@Inject
private Injector injector;
@Override
public void configure(ResourceInfo resourceInfo, FeatureContext context) {
// Logic to decide on registering of filter followed by one of the
// following depending on injection method:
context.register(AuthFilter.class);
context.register(this.injector.getInstance(AuthFilter.class);
context.register(this.authFilterProvider.get());
}
}
// AKA Dropwizard environment.jersey().register(...);
resourceConfig.register(this.injector.getInstance(MyResource.class));
并且MyResource包含@context成员和@inject成员这两个@context/@inject成员都在运行时被正确填充。因此,由于某种原因,资源注册和过滤器注册/管理的行为是不同的。
如有任何想法/见解,将不胜感激。
我想我可以给你一个答案。
您是否正在用@Provider注释注册您的dynamicFeature?
我相信这里可能发生的是HK2尝试在您设置Guice-HK2桥之前注册您的DynamicFeature(以及您的过滤器)。
// do your hk2 guice-bridge stuff before this
resourceConfig.register(InjectableAuthDynamicFeature.class)
--edit--完全错误,原因是无法在ContainerRequestFilter中看到guice依赖项是因为GuiceScope类的可视性是本地的。
这基本上意味着只有父serviceLocator才能正确地为guice依赖项提供服务。ContainerRequestFilter/Mappers/Features都是由子ServiceLocator创建的,因此没有解析GuiceScope上下文的权限。
为了解决这个问题,我已经分叉了hk2 Guice桥,并重写了GuiceScope以使用可见性正常。
以下是代码的链接:https://github.com/hk2-project/hk2/blob/master/guice-bridge/src/main/java/org/jvnet/hk2/guice/bridge/internal/guiceScopeContext.java#L58
我不知道为什么没有人遇到过这个问题,但它似乎无缘无故地限制了guice-bridge。
问题内容: 但是当应用程序尝试在客户端请求之后调用它时,自动装配的Bean为空。在applicationContext.xml中,我只有 组件扫描 设置。 -- 我究竟做错了什么? UPD: 这是我的pom.xml https://bitbucket.org/spukhov/memo- ws/src/00724e00e3aa786f62fd0e43fe0606de6ae569df/pom.xml?
我在使用google Guice获取google cloudendpoint时遇到了麻烦。从endpoints库中可用的类看来,这应该是可能的,但我不清楚如何连接它,也没有看到任何文档。
我试图使用对基于Tomcat的Jersey应用程序强制执行某些身份验证。我遵循了这份文件。问题:筛选器从未触发 web.xml文件:
更新刚刚听到从泽西的家伙,这是不可能的2.7。只有资源方法本身被异步调用,而不是筛选器。仍然欢迎任何关于继续进行的建议。
我是一个尝试使用Guice的人(这里是新手!!)我的一个项目。 所以我有一个 我的实现是 我还将DataQueue接口定义为 DataQueue的实现如下 在我的AppModule.Configure方法中,我有以下代码 我的ConsumerFactory是一个带有create()方法的接口,该方法返回一个使用者 我的DataQueueFactory是一个带有create()方法的接口,该方法返回
我在jaxrs项目中有一个异常映射器来捕获所有NotFoundExcture并格式化响应。在Tomcat中运行时,在引发异常时调用异常映射器。我现在不得不转移到JBoss,所有的工作都很好,除了异常映射器不再被调用。 网状物xml 异常映射器