【问题标题】:@Context injection not working in Jersey ContainerRequestFilter (Dropwizard)@Context 注入在 Je​​rsey 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 对请求进行身份验证。

我该如何解决这个问题.. 需要帮助吗?

【问题讨论】:

    标签: java jersey jetty jersey-2.0 dropwizard


    【解决方案1】:

    It's a known issue with DynamicFeature。注册为对象时,注入不起作用。

    您可以做的一件事是手动注入它,就像this post 中提到的那样。

    您可以做的另一件事是使HerculesRestAccessor 和applicationName 可注射。或者更确切地说,让应用程序名称可注入,您可以将其设置为配置属性和inject the configuration。如果你这样做,那么你可以将过滤器注册为一个类,并且所有的注入都应该工作。

    【讨论】:

    • @peeskillet..Thanks..:) 将同时注入两个字段并将过滤器注册为一个类。
    猜你喜欢
    • 2019-07-05
    • 2016-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-11
    • 1970-01-01
    • 2016-12-03
    • 1970-01-01
    相关资源
    最近更新 更多