0

我有一个 CDI -> EJB 应用程序。我过去使用 JBoss j_security 进行安全保护。我和 Shiro 的安全工作。

但我唯一的问题是如何在我的 EJB 中获取SessionContext ?使用 Jboss Security,我获得了用户名,该用户名使用以下命令登录该位置:

会话上下文会话上下文; 字符串电子邮件 = sessionContext.getCallerPrincipal().getName();

现在我想在我的 EJB 中获取用户名。如何使用 SessionContext 设置用户名?

谢谢你的帮助

4

1 回答 1

0

这有点棘手,而且还取决于您使用的 JBoss 版本。在 AS 7.x 和 EAP 6.x 范围内,这实际上无法通过使用公共 API 来完成,因为存在一些错误。

为了sessionContext了解用户名和角色,您可以使用我在这里使用的 JBoss 特定代码:https ://github.com/javaeekickoff/jboss-as-jaspic-patch/commit/d691fd4532d9aeae6136e3adc2537ff81c525673

它应该是这样的;

SecurityContext context = SecurityActions.getSecurityContext();
context.getUtil().createSubjectInfo(new SimplePrincipal(userName), 
    null,
    someSubject
);

查看文件的其余部分,了解someSubject应该如何创建和填充。

不幸的是,上面提到的 JBoss 版本@RolesAllowed永远不会起作用,因为 JBoss 不会从本地调用者那里接管已经过身份验证的身份,但总是会在调用实际 bean 之前咨询 JBoss 特定的“安全域”。当然,它对白一无所知。

于 2014-01-09T23:06:33.807 回答