@Context 注入在 Jersey ContainerRequestFilter (Dropwizard) 中不起作用
Posted
技术标签:
【中文标题】@Context 注入在 Jersey ContainerRequestFilter (Dropwizard) 中不起作用【英文标题】:@Context injection not working in Jersey ContainerRequestFilter (Dropwizard) 【发布时间】:2017-10-21 05:31:32 【问题描述】:@Context 注入适用于类,但不能使其适用于对象。
ContainerRequestFilter 中的httpServletRequest 产生空指针。
Dropwizard 版本:- 1.1.0
容器请求过滤器
公共类 ApplicationIPAuthFilter 实现 ContainerRequestFilter private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationIPAuthFilter.class); 私有 HerculesRestAccessor restAccessor; 私有字符串应用程序名称; @语境 私有 HttpServletRequest httpServletRequest; 公共应用程序IPAuthFilter() 公共 ApplicationIPAuthFilter(HerculesRestAccessor 访问器,字符串应用程序名称) restAccessor = 访问者; this.applicationName = 应用程序名称; @覆盖 公共无效过滤器(ContainerRequestContext requestContext)抛出 IOException // 需要远程IP 字符串 remoteIp = this.httpServletRequest.getRemoteAddr(); ……动态特性
@Provider 公共类 ApplicationIPAuthFeature 实现 DynamicFeature 私有最终 HerculesRestAccessor 访问器; 私有最终字符串应用程序名称; 公共应用程序IPAuthFeature(HerculesRestAccessor 访问器,字符串应用程序名称) this.accessor = 访问器; this.applicationName = 应用程序名称; @覆盖 公共无效配置(ResourceInfo 资源信息,FeatureContext 上下文) if (resourceInfo.getResourceMethod().getAnnotation(ApplicationIPAuthRequired.class) != null) // 不工作 context.register(new ApplicationIPAuthFilter(accessor, applicationName)); //@Context 注入适用于类的 ContainerRequestFilter //context.register(ApplicationIPAuthFilter.class);我正在尝试在 ContainerRequestFilter 中获取远程 ip,以根据 ip 对请求进行身份验证。
我该如何解决这个问题.. 需要帮助吗?
【问题讨论】:
【参考方案1】:It's a known issue with DynamicFeature。注册为对象时,注入不起作用。
您可以做的一件事是手动注入它,就像this post 中提到的那样。
您可以做的另一件事是使HerculesRestAccessor
和applicationName
可注射。或者更确切地说,让应用程序名称可注入,您可以将其设置为配置属性和inject the configuration。如果你这样做,那么你可以将过滤器注册为一个类,并且所有的注入都应该工作。
【讨论】:
@peeskillet..Thanks..:) 将同时注入两个字段并将过滤器注册为一个类。以上是关于@Context 注入在 Jersey ContainerRequestFilter (Dropwizard) 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
警告: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.je
警告: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.je
警告: [SetContextPropertiesRule]{Context} Setting property 'source' to 'org.eclipse.jst.je