- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经创建了一个 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://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
。
如果您需要获取 grizzly 级别的 Principal
对象,您可以将当前的 Request
注入(inject)到您的过滤器中,然后检索 filter
中的值方法。
@Context
private ThreadLocal<Request> request;
关于java - UnsupportedOperationException getUserPrincipal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20105005/
我已经创建了一个 ContainerRequestfilter 并成功触发了它。现在我想访问我之前在 grizzly HttpServerProbe 中设置的 UserPrincipal,如下所示:
我对 Java EE 有点陌生,正在尝试学习它。所以我不清楚 request.getUserPrincipal() 到底是如何工作的。它从哪里获取Principal对象?该对象何时以及如何创建? 因此
我在前端使用 AngularJS,在后端使用 Java EE。我创建了两种使用 RESTful 服务登录和注销的方法: @POST @Path("login") @Produces("applicat
我在 websphere application server 7.0 上部署了 web 应用程序。用户使用/j_security_check 登录。当 session 超时发生时 session i
用户已成功通过身份验证,但在我转到下一个 Controller 时进行身份验证后,我得到了 request.getUserPrincipal() null。我正在使用 websphere 7,我的应用
在我的 WebService 中,我需要记录调用者的 ID,但 wsContext.getUserPrincipal() 返回 null,即使用户是使用带密码身份验证的 WS-Security 进行身
以下是我的代码,对我来说似乎没问题,但在运行时出现错误HTTP Status 500。 protected void doPost(HttpServletRequest request, Ht
大家好,我正在尝试在我的 Web 服务和客户端应用程序之间使用纯 SSL。它们都在 GlassFish 2.1.1 中运行,并且各自位于不同的域中。客户端应用程序本身就是 Web 应用程序,我添加了
我正在创建一个使用相互身份验证的 Web 服务(和测试客户端)。我用过 this guide创建 CA 和 key /信任库,但我没有为客户端创建 .p12 文件,而是使用“设置您的 Web 服务器”
有人知道为什么 UserPrincipal 的 getName() 方法有时会提供一个空字符串吗?大多数时候它会返回正确的用户名,但并非每次都如此。 这种行为是随机发生的。我可以启动应用程序,运行命令
在我们的应用程序中观察到一个非常奇怪的情况(Spring Boot 1.5.6 具有所有默认的 BOM 依赖项):您可以完美登录(使用 AbstractPreAuthenticatedProcessi
我需要将现有应用程序与 Acegi/Spring 安全性连接起来。 为了开始,我正在寻找一条简单的信息:在这种情况下,从我的应用程序调用的 HttpServletRequest.getUserPrin
本文整理了Java中org.apache.tomcat.websocket.WsSession.getUserPrincipal()方法的一些代码示例,展示了WsSession.getUserPrin
我正在尝试在 Tomcat 7 应用程序上设置相互身份验证。我的 server.xml 具有以下连接器: 当我尝试使用类似于“https://testserver:8443/myapp/LoadU
这两个人似乎在做同样的事情。谁能解释两者之间的主要区别?你什么时候使用一个与另一个? HttpServletRequest.getRemoteUser() HttpServletRequest.get
我有一个 Spring-MVC 应用程序(即我正在使用 Spring 的调度程序 servlet)。我还使用 Spring Security 来验证用户身份。由于我使用 Spring 的调度程序 se
我们在使用更高版本和最新版本的 Tomcat 时遇到问题,这会阻止我们升级到比 7.0.22 更高的版本。 我们将 FormBasedAuthentication 与自定义领域一起使用。 这是在 Wi
我的环境是 Jboss AS 7.1.0。我正在使用 JUnit 和 Arquillian 进行单元测试。我的 ejb 中有使用 getUserPrincipal() 和 isCallerInRole
我是一名优秀的程序员,十分优秀!