2012-03-26 7 views
-1

次のコード例の意味は重要ではありません。私は、certFileNameをparamsとしてsocketFactoryに送信する方法を教えてください。異なるcertFileを使用する必要があります別のエンドポイントに、感謝LdapでSocketFactoryにparamsを送信する方法

public class LdapConnection 
{ 

    private String host = "1.2.3.4"; //the correct ip... 
    private String baseDn = "dc=x,dc=y,dc=com"; //the correct base DN 

    private String username = "myUsername"; 
    private String password = "myPassword"; 

    private String connectionUrl = null; 

    public void connectLdaps() throws Exception 
    { 
     connectionUrl = "ldaps://" + host + "/" + baseDn; 

     System.out.println("Trying to connect to " + connectionUrl + " using LDAPS protocol"); 

     Hashtable<String, String> env = new Hashtable<String, String>(); 
     env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 
     env.put("java.naming.ldap.derefAliases", "finding"); 
     env.put(Context.PROVIDER_URL, connectionUrl); 
     env.put(Context.SECURITY_AUTHENTICATION, "Simple"); 
     env.put(Context.SECURITY_PRINCIPAL, username); 
     env.put(Context.SECURITY_CREDENTIALS, password); 
     env.put("java.naming.ldap.factory.socket", MySocketFactory.class.getName()); 

     new InitialLdapContext(env, null); 

     System.out.println("Connected successfully!"); 
    } 

    public static void main(String[] args) throws Exception 
    { 
     LdapConnection ldapConnection = new LdapConnection(); 
     ldapConnection.connectLdaps(); 
    } 

} 

public class MySocketFactory extends SocketFactory 
{ 
    private static MySocketFactory instance = null; 
    private SSLContext sslContext = null; 

    //I want to send this var from outside 
    **private static String certFileName = "C:\\certs\\cert_by_hostname.cer";** 

    public static SocketFactory getDefault() 
    { 
     if (instance == null) 
     { 
      try 
      { 
       instance = new MySocketFactory(); 
       instance.initFactory(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
       System.out.println("Returning null socket factory"); 
      } 
     } 

     return instance; 
    } 
} 

は、この方法のようになることがあります。私は、「外」のコードで何をすべき

public class MySocketFactory extends SocketFactory 
{ 
    private MySocketFactory instance = null; 
    private SSLContext sslContext = null; 

    //I want to send this var from outside 
    private String certFileName = null 

    public MySocketFactory(String varCert) 
    { 
     certFileName = varCert; 
    } 
} 

感謝!

+0

@TerryGardner、なぜあなたは 'ldap'タグを削除し続けますか([メタに関するこの質問(http://meta.stackexchange.com/q/118827/148833)を参照してください)? – Bruno

+0

@ Brunoこれらの削除のうちのいくつかは意味があります。質問が本当にOpenLDAPのような特定のサーバをどのように設定するかについての問題であり、LDAP自身との関連性がないときです。これはもう一つ合理的なケースです。実際にはJSSEとJNDIの間のやりとりであり、LDAP *自体とはまったく関係ありません。私は自分自身もこの質問のタグを編集したと思う。 – EJP

+0

@downvoterをご説明ください。そうでなければ誰も何も学ばない。 – EJP

答えて

1

ソケットファクトリをまったく書く必要はありません。 「JSSEリファレンスガイド」を参照してください。適切なシステムプロパティを設定するだけです。

+0

しかし、私は別のエンドポイントに別の証明書を使用する必要があります。システムプロパティを使用すると、endPointが1つしかない問題は解決されます。 – SoYoung

+0

@ Soooungこの制約をあなたの質問に入れてください。 – EJP

+0

申し訳ありませんが、私はそれを感じていません – SoYoung

関連する問題