@Context注入无效在Jersey ContainerRequestFilter(Dropwizard)
@Context注入适用于类,但不能使它与Objects一起使用。
ContainerRequestFilter中的httpServletRequest生成空指针。
Dropwizard版本: – 1.1.0
ContainerRequestFilter
公共类ApplicationIPAuthFilter实现ContainerRequestFilter {private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationIPAuthFilter.class); 私人HerculesRestAccessor restAccessor; private String applicationName; @Context private HttpServletRequest httpServletRequest; public ApplicationIPAuthFilter(){} public ApplicationIPAuthFilter(HerculesRestAccessor accessor,String applicationName){restAccessor = accessor; this.applicationName = applicationName; } @Override public void filter(ContainerRequestContext requestContext)throws IOException {//需要remote Ip String remoteIp = this.httpServletRequest.getRemoteAddr(); ....}}
DynamicFeature
@Provider 公共类ApplicationIPAuthFeature实现DynamicFeature { 私人决赛HerculesRestAccessor访问者; private final String applicationName; public ApplicationIPAuthFeature(HerculesRestAccessor accessor,String applicationName){ this.accessor = accessor; this.applicationName = applicationName; } @覆盖 public void configure(ResourceInfo resourceInfo,FeatureContext context){ if(resourceInfo.getResourceMethod()。getAnnotation(ApplicationIPAuthRequired.class)!= null){ //不工作 context.register(new ApplicationIPAuthFilter(accessor,applicationName)); // @ Context注入在ContainerRequestFilter中用于类 //context.register(ApplicationIPAuthFilter.class); } } }
我正在尝试在ContainerRequestFilter中获取远程ip以基于ipvalidation请求。
我该如何解决这个问题..需要帮助吗?
这是DynamicFeature的一个已知问题 。 注册为对象时,注入不起作用。
您可以做的一件事是手动注入它,就像这篇文章中提到的那样。
您可以做的另一件事是使HerculesRestAccessor
和applicationName
可注入。 或者更确切地说,使应用程序名称可注入,您可以使其成为配置属性并注入配置 。 如果这样做,那么您可以将filter注册为一个类,并且所有注入都应该有效。
- DropWizard Auth by Example
- Swagger 1.5不显示我的1.2的@Api描述?
- 如何使用自定义Dropwizardfilter可选地保护资源
- 如何使用Dropwizard 1.0.2中的LoggingFeature打印服务器响应?
- 使用Dropwizard和JDBI查询具有多个模式的数据库?
- 将Apache Shiro Security Library与基于Dropwizard的JAX-RS应用程序集成
- 使用jackson将json反序列化为java – 特殊字符问题
- Jersey / JAX-RS资源方法输入beanvalidation
- 如何在另一个中嵌入一个DropWizard(带有freemarker)视图?