0

jboss を 7.1.1.Final として使用しており、LdapExtLoginModule を使用してセキュリティ ドメインを構成しました。ログインは今のところ機能しています。

SLSB のモジュールによってロードされたロールにアクセスしたいと考えています。ユーザー名にアクセスする方法を知っています。私の例では ejb 3.1 を使用し、ユーザー名を System.out に出力します。

ロールにアクセスする方法がわからず、ドキュメントに何も見つかりませんでした。EJBContext は、コンテキスト自体がロールを認識していることを証明するメソッド isCallerInRole(String) を提供しますが、一連のロールを返すメソッドが見つかりません。

LdapExtLoginModule を拡張し、ロールを含むカスタム プリンシパルを設定するカスタム LoginModule を記述できることはわかっています。しかし、既存の機能を使用するより簡単なアプローチがあるかもしれません。誰もそのようなアプローチを知っていますか?

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 が「Roles」という名前のグループを設定する JBoss でのみ機能します。

于 2013-06-03T10:42:59.893 に答える