gpt4 book ai didi

java - @Context 注入(inject)在 Je​​rsey ContainerRequestFilter (Dropwizard) 中不起作用

转载 作者:搜寻专家 更新时间:2023-11-01 02:37:30 24 4
gpt4 key购买 nike

@Context 注入(inject)适用于类,但无法使其适用于对象。

ContainerRequestFilter 中的 httpServletRequest 产生空指针。

Dropwizard 版本:- 1.1.0

容器请求过滤器

public class ApplicationIPAuthFilter implements ContainerRequestFilter {    private static final Logger LOGGER = LoggerFactory.getLogger(ApplicationIPAuthFilter.class);    private 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 {        // need remote Ip        String remoteIp = this.httpServletRequest.getRemoteAddr();        ....    }}

动态特征

@Providerpublic class ApplicationIPAuthFeature implements DynamicFeature {    private final HerculesRestAccessor accessor;    private final String applicationName;    public ApplicationIPAuthFeature(HerculesRestAccessor accessor, String applicationName) {        this.accessor = accessor;        this.applicationName = applicationName;    }    @Override    public void configure(ResourceInfo resourceInfo, FeatureContext context) {        if (resourceInfo.getResourceMethod().getAnnotation(ApplicationIPAuthRequired.class) != null) {            // not working            context.register(new ApplicationIPAuthFilter(accessor, applicationName));             //@Context injection works in ContainerRequestFilter for classes            //context.register(ApplicationIPAuthFilter.class);        }    }}

我正在尝试在 ContainerRequestFilter 中获取远程 ip 以根据 ip 对请求进行身份验证。

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

最佳答案

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

你可以做的一件事是手动注入(inject)它,就像 this post 中提到的那样.

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

关于java - @Context 注入(inject)在 Je​​rsey ContainerRequestFilter (Dropwizard) 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44097938/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com