【发布时间】: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 的情况下进行了身份验证