0

我使用 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
    }

}
4

1 回答 1

4

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

Java EE API 不提供任何方法来以独立于服务器的方式访问信息。所以我尝试了编写一个设置自定义主体的登录模块的方法。事实证明,这也不起作用

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

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");
}

此方法返回的包含具有用户组名称的主体这仅适用于其 LoginModules 设置了一组名称“角色”的 JBoss。

于 2013-06-03T10:42:59.893 回答