authentication - 如何手动设置/传播安全上下文信息,例如JBoss 7 的主体(通过 JBoss 远程处理 2)

标签 authentication jboss ejb-3.1

我正在使用 jboss remoting 2.5.4.SP3 提供从 Web 应用程序和其他 JBoss 实例对 JBoss 7.1 服务器中的 EJB 的远程访问。由于 JBoss 7.1 中的远程 EJB 访问问题,我手动执行此操作,特别是(但不仅)无法同时访问多个服务器上的相同(接口(interface))bean。我正在使用 remoting2 因为 remoting3 没有文档。

我使用套接字传输使用 TransporterHandle/TransporterClient 进行远程处理,但是在通过此远程连接调用的方法中,服务器希望从 ejbContext 中查找主体。我找不到手动设置主体或其他上下文安全/身份信息的方法。在极限情况下,我很乐意在调用 ejb 方法时设置主体——所有传入调用都是对本地 EJB3 bean 的——或者甚至专门为 EJBContext 设置它。

我找到了很多关于 Spring 的信息(我没有使用),但似乎没有什么与我的特定上下文相匹配。

最佳答案

现在,正确的方法是:

在客户端,我获取安全上下文并打包安全域和主题信息,以便与调用一起传输到服务器。 SecurityDomain 是一个字符串,SubjectInfo 是可序列化的:

Map m = new HashMap();
SecurityContext securityContext = SecurityContextAssociation.getSecurityContext();
if (securityContext != null) {
    m.put("SUBJECT-INFO", securityContext.getSubjectInfo());
    m.put("SECURITY-DOMAIN", securityContext.getSecurityDomain());
}
response = remotingClient.invoke(request, m);

map m 通过 jboss 远程处理的调用发送。在服务器端,我提取安全信息并为调用设置上下文,如下所示:
SecurityContext oldContext = SecurityContextAssociation.getSecurityContext();
SubjectInfo si = (SubjectInfo) invocation.getRequestPayload().get("SUBJECT-INFO");
String domain = (String) invocation.getRequestPayload().get("SECURITY-DOMAIN");
if (si != null) {
    SecurityContext sc = new JBossSecurityContext(domain);
    sc.setSubjectInfo(si);
    SecurityContextAssociation.setSecurityContext(sc);
}
try {
    return super.invoke(invocation);
} finally {
    SecurityContextAssociation.setSecurityContext(oldContext);
}

奇迹般有效!

关于authentication - 如何手动设置/传播安全上下文信息,例如JBoss 7 的主体(通过 JBoss 远程处理 2),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10629756/

相关文章:

java - EJB 2.1 与 EJB 3.1

authentication - 如何注销用户以进行基本 HTTP 身份验证

android - Google Auth错误-com.google.android.gms.auth.UserRecoverableAuthException:NeedPermission

ruby-on-rails - 为什么身份验证是 : 'plain' the default setting for actionmailer in rails (with gmail smtp)?

java - EJB 异常 : Failed to acquire the pool semaphore

jpa - 在 EJB 3.1 中调用远程 EJB

php - SLIM 框架路由身份验证 v2 与 v3

Java - 使用 JBOSS/WildFly 邮件服务而不是 Apache Commons Email 发送邮件有什么优势吗?

java - 发送commit_sm请求时,Restcomm SMSC会继续引发ActivityAlreadyExistsException

java - 如何在 StatelessBean 中使用 ConversationScoped EntityManager