2012-09-26 4 views
2

UnboundID와 관련하여 도움이 필요합니다. 나는 그것이 훌륭한 선택이라고 들었지 만, 나는 그것에 익숙하지 않다.UnboundID로 DN 및 비밀번호를 얻는 방법

그래서 LDAP 수신기를 만들어야합니다. 이 수신기에서 (예를 들어, LDAP 브라우저에서) 바인드 요청을 잡을 수 있어야합니다. DN 및 비밀번호를 얻는 방법에 대해 궁금합니다. 여기에 LDAP 리스너 내 코드입니다 :

public ResultCode CreateLdapServer() throws LDAPException { 
     CannedResponseRequestHandler requestHandler = new CannedResponseRequestHandler(); 
    LDAPListenerConfig config = 
      new LDAPListenerConfig(4243, requestHandler); 
     try 
     { 
     config.setListenAddress(
      InetAddress.getByName("localhost")); 
     } 
     catch (final Exception e) 
     { 
     System.err.println("Unable to create the listen server."); 
     return ResultCode.PARAM_ERROR; 
     } 

    listener = new LDAPListener(config); 

    try 
    { 
     listener.startListening(); 
     System.out.println("Serveur is listening ..."); 
    } 
    catch (final Exception e) 
    { 
     System.err.println("Unable to start listening."); 
     return ResultCode.LOCAL_ERROR; 
    } 
    return ResultCode.SUCCESS; 
} 

public static void main(String[] args) throws LDAPException { 
    MyConnection connect = new MyConnection(); 
    connect.CreateLdapServer(); 
} 

내가 UnboundID 문서를 많이 읽고,하지만 난 내가 필요한 모든 간단한 예를 찾을 수 없습니다.

또한 CannedResponseRequestHandler의 유틸리티에 대해 잘 모르겠습니다. 내가 필요한만큼 충분하니?

다른 질문 : 잘 모르겠지만 내 서버가 듣지 않거나 아무것도 잡을 수 없다는 느낌이 들었습니다. (내가 LDAP 브라우저로 연결할 때 아무 일도 없었습니다). 어떤 아이디어/제안?

감사합니다. 좋은 하루 되세요!

편집 : xhochy 덕분에 암호와 사용자 이름을 알 수있었습니다. 그가 말했듯이, LDAPListenerRequestyHandler를 하위 클래스 화하여 우선 newInstance와 ProcessBindRequest를 재정의했습니다. 다음은 코드입니다 (절대적으로 완벽하지는 않으며 아직 시작 단계입니다).

공용 클래스하고 MyConnection {

private LDAPListener listener; 

public MyConnection(){ 
} 

public ResultCode CreateLdapServer() throws LDAPException { 
    MyLDAPListenerRequestHandler requestHandler = new MyLDAPListenerRequestHandler(); 
    LDAPListenerConfig config = 
      new LDAPListenerConfig(4243, requestHandler); 
     try 
     { 
     config.setListenAddress(
      InetAddress.getByName("localhost")); 
     } 
     catch (final Exception e) 
     { 
     System.err.println("Unable to create the listen server."); 
     return ResultCode.PARAM_ERROR; 
     } 

    listener = new LDAPListener(config); 

    try 
    { 
     listener.startListening(); 
     System.out.println("Serveur is listening ..."); 
    } 
    catch (IOException e) 
    { 
     System.err.println("Unable to start listening."); 
     return ResultCode.LOCAL_ERROR; 
    } 


    return ResultCode.SUCCESS; 
} 

public static void main(String[] args) throws LDAPException { 
    MyConnection connect = new MyConnection(); 
    connect.CreateLdapServer(); 
} 

}

그런 LDAPListenerRequestHandler의 서브 클래스 : 다시

public class MyLDAPListenerRequestHandler extends LDAPListenerRequestHandler { 

@Override 
public LDAPListenerRequestHandler newInstance(
     LDAPListenerClientConnection arg0) throws LDAPException { 
     System.out.println("New Instance."); 
     LDAPConnectionOptions option = new LDAPConnectionOptions(); 
     LDAPConnection connection = new LDAPConnection(option, "yourIPadress", yourport); 
     System.out.println("Connected to : " + connection.getConnectedAddress()+ " " + connection.getConnectedPort()); 

    return this; 
} 

@Override 
public LDAPMessage processBindRequest(int arg0, BindRequestProtocolOp arg1, 
     List<Control> arg2) { 
    System.out.println(arg1.getBindDN()); 
    System.out.println(arg1.getSimplePassword()); 
    return null; 
} 

}

감사합니다!

+0

사람들의 암호를 잊어 버리려고합니까? – pap

+0

아니요, 사람들이 권한이 있는지 아닌지 확인하는 웹 서비스에 넣으려면 사용자 이름과 암호가 필요합니다. – Roux

+0

그러나 그게 바로 LDAP 서버의 용도입니다! 귀하의 질문은 아직 이해가되지 않습니다. – EJP

답변

2

LDAPListenerRequestHandler을 서브 클래스 화하고 processBindRequest을 구현해야합니다. 찾고있는 모든 정보는 BindRequestProtocolOp (두 번째 인수 인 processBindRequest)에 포함되어 있습니다. 다른 모든 추상 메소드에 대해 빈 구현을 추가하십시오.

String username = request.getBindDN(); 
ByteString password = request.getSimplePassword(); 
+0

고맙습니다. @ xhochy, 오늘 확인할 것입니다!:) – Roux

+0

CannedResponseRequestHandler를 서브 클래 싱 할 수 없습니다 (최종). 그래서 LDAPListenerRequestHandler를 사용해 보았습니다. 바인드를 표시하기 위해 무시되었지만, 뭔가 빠져있는 것처럼 보입니다. 제 LDAP 브라우저는 서버와 통신하지 않습니다. – Roux

+0

또 다른 시도 : LDAPListenerRequestHandler를 직접 하위 클래스로 만들고 다른 모든 추상 메소드에 빈 구현을 추가 할 수 있습니다. – xhochy

1

대부분의 LDAP 서버 구현이 암호를 반환하지 않습니다 많은 당신이 사용할 수있는 암호를 반환하지 않습니다 :

requestBindRequestProtocolOp 인스턴스 인 경우

는 당신이를 통해 정보를 얻을 수 있습니다. (즉, 아마도 해시).

왜 비밀 번호를 반환 할 이유가 있을지 궁금합니다.

-jim

관련 문제