gpt4 book ai didi

java - UnsupportedOperationException getUserPrincipal

转载 作者:行者123 更新时间:2023-12-02 06:30:29 27 4
gpt4 key购买 nike

我已经创建了一个 ContainerRequestfilter 并成功触发了它。现在我想访问我之前在 grizzly 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 我可以做到这一点,但必要的主体信息并不像我预期的那样可用。

我正在使用 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://subversion.jfrog.org/artifactory/public/tags/2.1.0/rest/src/main/java/org/artifactory/rest/common/RestAuthenticationFilter.java

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 合作组装此信息的方式设置主体的安全上下文?

最佳答案

Jersey/JAX-RS 预计 SecurityContext在检索有关主体、用户角色等的任何信息之前进行设置。通常,在 Jersey ,这是由专用 ContainerRequestFilter 完成的。看一下我们的一个示例中的示例过滤器:SecurityFilter .

此后,您可以将SecurityContext(使用@Context)注入(inject)到您的资源或其他提供程序(例如过滤器)中。然后,您还可以调用 containerRequest.getUserPrincipal(),而不会收到 UnsupportedOperationException

编辑1

如果您需要获取 grizzly 级别的 Principal 对象,您可以将当前的 Request 注入(inject)到您的过滤器中,然后检索 filter 中的值方法。

@Context
private ThreadLocal<Request> request;

关于java - UnsupportedOperationException getUserPrincipal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20105005/

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