使用Jboss7访问SLSB中的调用者角色

时间:2013-05-29 11:40:24

标签: jboss7.x ejb-3.1

我使用jboss作为7.1.1.Final并使用LdapExtLoginModule配置了安全域。登录工作到目前为止。

我现在想要访问SLSB中模块加载的角色。我知道如何访问用户名。我的示例使用ejb 3.1并将用户名输出到System.out。

我不知道如何访问角色,也没有在文档中找到任何内容。 EJBContext提供了方法isCallerInRole(String),它证明了上下文本身知道角色,但我找不到返回一组角色的方法。

我知道我可以编写一个自定义的LoginModule,它扩展了LdapExtLoginModule并设置了包含角色的自定义主体。但也许使用现有功能有一种更简单的方法。有人知道这种方法吗?

SLSB代码:

@Stateless
@Remote(IAService.class)
public class AService implements IAService
{

    @Resource
    private EJBContext context;

    @Override
    public void printUserData() {
        System.out.println("Name: " + context.getCallerPrincipal().getName());
        // TODO print roles
    }

}

1 个答案:

答案 0 :(得分:4)

到目前为止,没有人回答我的问题,因为我终于找到了一个有效的解决方案,现在我将与您分享:

Java EE API不提供任何以独立于服务器的方式访问信息的方法。所以我尝试了编写一个设置自定义主体的登录模块的方法。 As it turns out this does not work either

受到这个问题答案的启发,我现在使用以下代码来获取调用者角色:

private Group getRoles() {
    final Subject subject = (Subject)PolicyContext.getContext("javax.security.auth.Subject.container");
    final Set<Group> groups = subject.getPrincipals(Group.class);
    for (final Group group : groups) {
        if ("Roles".equals(group.getName())) {
            return group;
        }
    }
    throw new IllegalStateException("No roles group found");
}

此方法返回的Group包含Principals,其中包含用户组的名称。这仅适用于JBoss,其LoginModules设置名为“Roles”的组。