【问题标题】:Cannot inject ResourceInfo into ContainerRequestFilter无法将 ResourceInfo 注入 ContainerRequestFilter
【发布时间】:2016-06-23 17:09:15
【问题描述】:

我正在尝试实现一个 ContainerRequestFilter 来检查一些东西。最终,它将验证令牌,但我还没有。过滤器在 Grizzly HTTP Server (Grizzly 2.3.4) 上运行,并位于 JAX-RS 资源 (Jersey 2.0) 前面。我也在使用 Guice 3.0。

当我尝试将 javax.ws.rs.container.ResourceInfo 注入过滤器时,它为空。

import javax.ws.rs.container.ContainerRequestContext;
import javax.ws.rs.container.ContainerRequestFilter;
import javax.ws.rs.container.ResourceInfo;
import javax.ws.rs.core.Context;
import java.io.IOException;

public class MyRequestFilter implements ContainerRequestFilter {

    @Context
    private ResourceInfo resourceInfo;

    public void filter(ContainerRequestContext containerRequestContext) throws IOException {

        String method = containerRequestContext.getMethod();
        System.out.println("method = " + method);

        if("OPTIONS".equals(method)) return;

        System.out.println("DO SECURITY");
    }
}

将请求注入到 JAX-RS 资源中,注入成功,我可以使用它。

我做错了什么?

【问题讨论】:

  • 嘿。我相信您所做的是特定于资源的身份验证,对吗?您的方法可行,但是您通常会首先使用动态功能来实现该功能。我有一个例子,如果你有兴趣,请看一下:stackoverflow.com/questions/35732360/…(不要被问题中的 dropwizard 吓到,它会回答通用球衣)
  • 如果您需要访问 ResourceInfo 并对其应用过滤器,我建议您尝试 DynamicFeature。我在这里提到的问题有一个关于如何使用这些功能的解决方案。 stackoverflow.com/q/35727497/1925997
  • 我在没有 ResourceInfo 的情况下进行了身份验证

标签: jersey guice grizzly


【解决方案1】:

要在ContainerRequestFilter 中启用注入,您必须将其注释为@Provider,然后才能工作

@Provider
public class MyRequestFilter implements ContainerRequestFilter {

    @Context
    private ResourceInfo resourceInfo;

    ...
}

【讨论】:

    猜你喜欢
    • 2019-01-31
    • 1970-01-01
    • 2021-10-07
    • 2018-01-16
    • 2011-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 1970-01-01
    相关资源
    最近更新 更多