如何将对象注入需要@context for Jersey/Dropwizard的AuthFilter
我试图弄清楚在jersey注册AuthDynamicFilter时如何注入对象如何将对象注入需要@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
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())));