当前位置: 首页 > 知识库问答 >
问题:

不支持的操作异常getUserPrincipal

计阳泽
2023-03-14
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);
}

问题是如何将主体信息从HttpServerProbe传输到ContainerRequestFilter。request具有安全信息(在本例中是SSL客户机证书信息),而com.sun.jersey.spi.container.ContainerRequest最初并不提供这些信息。

http://www.solutionoferror.com/java/use-containerrequestfilter-in-jersey-without-web-xml-79849.asp

泽西岛ContainerRequestFilter未触发

http://subversion.jfrog.org/artifactory/public/tags/2.1.0/rest/src/main/java/org/artifactory/rest/common/restauthenticationfilter.java

要访问主体/以HttpServerProbe和ContainerRequestFilter合作组合此信息的方式设置主体的安全上下文,需要做什么?

共有1个答案

隆钊
2023-03-14

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

在此之后,您可以将SecurityContext(使用@context)注入到您的资源或其他提供程序(如筛选器)中。然后还可以调用ContainerRequest.getUserPrincipal(),而不会得到UnsupportedOperationException

如果需要获得grizzly级别的principal对象,可以将当前的请求插入到筛选器中,然后在filter方法中检索值。

@Context
private ThreadLocal<Request> request;
 类似资料:
  • 我不知道;我不太明白在哪里可以抛出这个异常。 例如,我正在实现

  • 我想从excel(.xlsx)文件中读取超过60万行。 我使用的是ApachePOI和xlsx拖缆。 Apache poi版本为3.15,因为xlsx streamer在上述版本中不支持 我只想迭代特定的列。我尝试过的是: 我得到这个例外,几乎没有警告 第35行是

  • 下面是在strList5的subList.clear()调用中引发异常的代码: 我清除子列表的方式有问题吗?或者这是8Java的臭虫?我的Java8在Mac上的版本是:java版本"1.8.0_45"Java(TM)SE运行时环境(构建1.8.0_45-b14)JavaHotSpot(TM)64位服务器VM(构建25.45-b02,混合模式)

  • 我正在使用Collections.sort()对一个列表进行排序,它似乎在我可以测试的每一个方面都工作正常。我的一些用户崩溃了。 但是,我所做的只是尝试对列表进行排序 我注意到这在Android 8及更高版本上不会发生。它只发生在5.0 - 7.1上 该列表被实例化为ArrayList,被填充,并被设置为作为泛型列表的类的实例的成员。然后用EventBus发布这个对象。然后使用Kotlin的< c

  • 我正在使用sql server进行数据库连接。并且我希望在运行多个结果集时保持结果集打开。我使用了,但在执行语句时出现以下错误, 由于我是使用sql server的新手,所以我对其中的一些概念还不是很了解。如果有人知道为什么会这样请回答我。

  • 问题内容: 电子邮件验证 我想知道为什么我的数据不会写入磁盘。Python说我的操作不受支持。 问题答案: 您以只读方式打开变量“文件”,然后尝试对其进行写入: 相反,请使用“ w”标志。