如何将对象注入需要@context for Jersey/Dropwizard的AuthFilter

如何将对象注入需要@context for Jersey/Dropwizard的AuthFilter,jersey,dropwizard,dynamic-feature,dropwizard-guice,Jersey,Dropwizard,Dynamic Feature,Dropwizard Guice,我试图弄清楚在jersey注册AuthDynamicFilter时如何注入对象 public class CustomApplication extends Application<Configuration> { public void run(Configuration configuration, Environment environment) throws Exception { ... environment.jersey().regist

我试图弄清楚在jersey注册AuthDynamicFilter时如何注入对象

public class CustomApplication extends Application<Configuration> {
   public void run(Configuration configuration, Environment environment) throws Exception {
      ...

      environment.jersey().register(new AuthDynamicFeature(CustomAuthFilter.class));   
      ...
   }
}
在这种情况下,httpServletRequest将设置为null

我想办法解决这个问题的唯一办法就是不使用AuthDynamicFeature,只使用一个普通的过滤器并以这种方式注入它,这很好。我想知道你如何使用AuthDynamicFeature来实现它

我还是新泽西州的新手,所以请容忍我。我可能弄乱了一些概念

感谢您的建议, 谢谢
德里克

我有一个应用程序可以做到这一点。用
@Inject
注释构造函数:

@预匹配
公共类CustomAuthFilter扩展AuthFilter{
私人最终身份;
@上下文
私有HttpServletRequest HttpServletRequest;
@上下文
私有HttpServletResponse HttpServletResponse;
//用@Inject注释这个ctor
@注入
公共过滤器(标识){
这个。身份=身份;
}
@凌驾
公共无效筛选器(ContainerRequestContext requestContext)引发IOException{
…identity.process(httpServletRequest)
}
}
告诉Jersey的依赖项注入机制使用您提供的值注入
标识

Identity=getHeidEntity();
environment.jersey().register(new AbstractBinder()){
@凌驾
受保护的void configure(){
绑定(identity.to)(identity.class);
}
});
register(新的AuthDynamicFeature(CustomAuthFilter.class));
如果只有在运行时才知道
标识
,请使用
供应商
(调整构造函数 以及:

Supplier identity=getTheIdentitySupplier();
environment.jersey().register(new AbstractBinder()){
@凌驾
受保护的void configure(){
绑定(标识).to(新的TypeLiteral(){});
}
});
register(新的AuthDynamicFeature(CustomAuthFilter.class));

我有一个应用程序可以做到这一点。用
@Inject
注释构造函数:

@预匹配
公共类CustomAuthFilter扩展AuthFilter{
私人最终身份;
@上下文
私有HttpServletRequest HttpServletRequest;
@上下文
私有HttpServletResponse HttpServletResponse;
//用@Inject注释这个ctor
@注入
公共过滤器(标识){
这个。身份=身份;
}
@凌驾
公共无效筛选器(ContainerRequestContext requestContext)引发IOException{
…identity.process(httpServletRequest)
}
}
告诉Jersey的依赖项注入机制使用您提供的值注入
标识

Identity=getHeidEntity();
environment.jersey().register(new AbstractBinder()){
@凌驾
受保护的void configure(){
绑定(identity.to)(identity.class);
}
});
register(新的AuthDynamicFeature(CustomAuthFilter.class));
如果只有在运行时才知道
标识
,请使用
供应商
(调整构造函数 以及:

Supplier identity=getTheIdentitySupplier();
environment.jersey().register(new AbstractBinder()){
@凌驾
受保护的void configure(){
绑定(标识).to(新的TypeLiteral(){});
}
});
register(新的AuthDynamicFeature(CustomAuthFilter.class));
@PreMatching
public class CustomAuthFilter<P extends Principal> extends AuthFilter<String, P> {
   private final Object identity;

   @Context
   private HttpServletRequest httpServletRequest;

   @Context
   private HttpServletResponse httpServletResponse;

   public LcaAuthFilter(Identity identity) {
     this.identity = identity;
   }

   @Override
   public void filter(ContainerRequestContext requestContext) throws IOException {
       ...identity.process(httpServletRequest)
   }

}

   environment.jersey().register(new AuthDynamicFeature(new CustomerAuthFilter(new Identity())));