WebsphereでJNDIを使用してLDAPを操作する方法は?

私はLDAP操作の問題に直面しています。 GUI /ブラウザからユーザーが選択したときに、LDAPグループに動的にメンバーを追加したい。 Testクラス( com.sun.jndi.ldap.LdapCtxFactory を使用)で実行すると、完全にうまく動作する以下のコードを貼り付けます。しかし、ビルドでパッケージ化し、websphereアプリケーション・サーバー7.0( com.ibm.websphere.naming.WsnInitialContextFactory を使用)にデプロイし、ユーザーの選択に従ってこのメソッドを呼び出すと、エラーが表示されます以下。私は何が間違っているのだろうか。 LDAP接続ファクトリの実装を提供していませんか?私はまた、Testクラスで動作するsunのldapを使ってWASにデプロイしようとしましたが、以下と同じ例外が発生しています。誰かが手がかりを与えることができれば感謝します。

問題追加メンバー:javax.naming.OperationNotSupportedException:[LDAP:エラーコード53 - 00000561:SvcErr:DSID - 031A120C、問題5003(WILL_NOT_PERFORM)、データ0

My Code:

public class LDAPManager
{
    String GROUPS_OU =  "cn=users,dc=mit,dc=hq,dc=com";

    public Boolean addMember(String user, String group)
    {

        Hashtable env = new Hashtable();
        String adminName = "CN=Administrator,CN=Users,DC=mit,DC=hq,DC=com";
        String adminPassword = "asdfasdf21Q";
        String ldapURL = "ldap://mybox451Dev.mit.hq.com:389";
        String userName = "CN="+user+",CN=Users,DC=mit,DC=hq,DC=com";
        String groupName = "CN="+group+",CN=Users,DC=mit,DC=hq,DC=com";


        //env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");

        env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");

        //set security credentials, note using simple cleartext authentication
        env.put(Context.SECURITY_AUTHENTICATION,"simple");
        env.put(Context.SECURITY_PRINCIPAL,adminName);
        env.put(Context.SECURITY_CREDENTIALS,adminPassword);

        //connect to my domain controller
        env.put(Context.PROVIDER_URL, "ldap://mybox451Dev.mit.hq.com:389");

        try {

           //Create the initial directory context
            InitialDirContext ctx = new InitialDirContext(env);

            //Create a LDAP add attribute for the member attribute
            ModificationItem mods[] = new ModificationItem[1];
            mods[0]= new ModificationItem(DirContext.ADD_ATTRIBUTE, new BasicAttribute("member", userName)); 

            //update the group
            ctx.modifyAttributes(groupName,mods);

            ctx.close();

            //System.out.println("Added " + userName + " to " + groupName);

        } 

        catch (NamingException e) {
            System.err.println("Problem adding member: " + e);
        }

        return true;
    }

}

私はそれを解決した。ここにソリューションを投稿すると、これが誰かを助けてくれることを願います

  1. Use the standard JNDI context of sun, not websphere.
  2. Additional properties I was missing in the hashtable, once I added them, it worked like a charm.

    env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.ldap.LdapCtxFactory");  
    
    //env.put(Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");  
    
    //set security credentials, note using simple cleartext authentication  
    env.put(Context.SECURITY_AUTHENTICATION,"simple");  
    env.put(Context.SECURITY_PRINCIPAL,adminName);  
    env.put(Context.SECURITY_CREDENTIALS,adminPassword);  
    env.put(Context.URL_PKG_PREFIXES, "com.sun.jndi.url");  
    env.put(Context.REFERRAL, "ignore");  
    
0
どのコード行がその例外をスローしますか?
追加された 著者 EJP,

1 答え

さて、この質問が尋ねられてから1年以上経ちました。そう、私は答えは何か価値を追加するかわからない。しかし、ここにあります。 WAS Javadocs を参照してください。 WAS用にjndiprovider.propertiesファイルを調整する必要があるかもしれません。

0
追加された