【发布时间】:2013-11-20 19:21:55
【问题描述】:
我创建了一个 ContainerRequestfilter 并成功触发它。 现在我想访问我之前在灰熊 HttpServerProbe 中设置的 UserPrincipal,如下所示:
import com.sun.jersey.spi.container.ContainerRequest;
@Override
public ContainerRequest filter(ContainerRequest request) {
Principal principal=req.getUserPrincipal();
}
而是抛出“UnsupportedOperationException”。看起来 ContainerRequest 没有从修改后的请求中获取 UserPrincipal。
修改是通过
import org.glassfish.grizzly.http.server.Request;
...
public void onRequestReceiveEvent(
HttpServerFilter filter,Connection connection, Request request) {
Principal principal=getPrincipalFromRequest(request);
request.setUserPrincipal(principal);
}
问题是如何将 Principal 信息从 HttpServerProbe 传输到 容器请求过滤器。 org.glassfish.grizzly.http.server.Request 具有安全性 信息(在本例中为 SSL 客户端证书信息),而 com.sun.jersey.spi.container.ContainerRequest 最初不提供。
不幸的是,我还没有找到在 HttpServerProbe 中设置 SecurityContext 的方法。在 ContainerRequestFilter 我可以做到,但必要的 Principal 信息不可用。
我正在使用 Jersey 1.17 和 Grizzly 2.3.5
以下链接都与该问题有些相关,但没有一个提供线索 出现上述错误的原因可能是什么:
http://www.solutionoferror.com/java/use-containerrequestfilter-in-jersey-without-web-xml-79849.asp
Jersey ContainerRequestFilter not triggered
http://sites.gbif.org/common-resources/gbif-common-ws/xref/org/gbif/ws/server/filter/AuthFilter.html
http://2rdscreenretargeting.blogspot.de/2012/06/secure-jersey-with-oauth2.html
需要做些什么来访问主体/以 HttpServerProbe 和 ContainerRequestFilter 合作组装此信息的方式与主体设置安全上下文?
【问题讨论】:
标签: java authentication jersey grizzly