2011-08-04 19 views
4

外部LDAPを認証用のプロバイダとして使用しているWeblogicサーバーがあります。 特定のユーザーがLDAPリポジトリに関連付けたグループを回復する必要があります。 <% = request.getUserPrincipal()%>特定のユーザーのすべてのLDAPグループを取得するにはどうすればよいですか?

しかし、私は今必要なものです:

<form method="POST" action="j_security_check"> 
<p>Username: <input type="text" name="j_username"/></p> 
<p>Password: <input type="password" name="j_password"/></p> 
<input type="submit" value="Login"/> 
</form> 

し、ログインした後、私は使用してPrincialを回復することができます。

ログインは標準のJava表記法を使用していますLDAPからこのプリンシパルの関連グループをすべて回復しますか?出来ますか?

[] s

答えて

2

LDAPを使用せずにすべてのグループのリストを取得できない場合があります。 一般に、JAAS APIは、ユーザーが特定のグループに属しているかどうかを尋ねる方法を提供しますが、一度にすべてのグループを取得することはできません。

あなたが直接LDAPにアクセスすることなく行うことができるかもしれません最高のパフォーマンスヒットは一度セッションの作成でそれを行う場合は、あまりにも悪いことして、ユーザグループは、セッションスコープにするべきではありません

for (String group : allGroups) { 
    if (request.isUserInRole(group)) { 
    userGroups.add(group); 
    } 
} 

のようなものです。 (コンテナはログイン時にすべてのグループを取得できます)

+0

こんにちは、しばらく研究した後、私はあなたに同意します。この問題に対する私の最終的な解決策は、実際にはrequest.isUserInRoleを使用しなければならず、グループを取得するための回避策は独自の内部Weblogicクラスを使用する必要がありました。 –

+0

ああ、補完していますが、標準フォームを使って正常にログインした後、すべてのグループをループする必要はありませんでした。私の問題を解決するisUserInRole。 –

1

多くの回答がある可能性があります。 1つの可能な答えは、プリンシパルを使用してベースDNを作成し、baseというスコープとフィルタ'(&)'を使用して照会し、isMemberOf属性を要求することです。例えば、現代のldapsearchコマンドラインツールとuser.0のプリンシパルを使用して、私のテスト・システム上:

ldapsearch --hostname localhost --port 1389 \ 
    --bindDN 'cn=directory manager' --baseDn \ 
    'uid=user.0,ou=people,dc=example,dc=com' \ 
    --searchScope base '(&)' isMemberOf 
Password for user 'cn=directory manager': 
dn: uid=user.0,ou=people,dc=example,dc=com 
isMemberOf: cn=shadow entries,ou=groups,dc=example,dc=com 
isMemberOf: cn=persons,ou=groups,dc=example,dc=com 

このメソッドは、この場合dc=example,dc=comには、namingContextの知識を必要とし、ユーザーがツリーに置かれている場所。ユーザの位置がわからない場合の別の同様の方法は、最初にユーザを検索し、検索結果からの識別名を使用して上記のクエリを実行することであろう。 namingContextがわからない場合は、ルートDSEからnamingContextを検出することができます。ルートDSEからnamingContextをリカバリするには、articleを参照してください。

LDAP標準を正しくサポートせず、フィルタ'(&)'を拒否するディレクトリサーバーがあります。ディレクトリサーバーがこれらのいずれかである場合は、プレゼンスフィルタ'(objectClass=*)'を置き換えてください。 Java用のLDAP SDKはたくさんありますが、好みのものはUnboundIDのものです。

+0

こんにちはテリーですが、私の理解ではLDAPサーバーに直接アクセスする必要があります。私の要点は、JAAS APIを使用してLDAPを照会することです。何か案は? –

関連する問題