2014-03-02 1 views
0

사용자의 IP 주소를 사용하여 LDAP를 쿼리하는 방법을 찾고 있습니다.IP 주소 속성을 사용하는 LDAP 쿼리

누군가 브라우저를 사용할 때 브라우저는 IP 주소를 전송합니다. 해당 IP 주소를 사용하여 LDAP에 쿼리하여 해당 IP 주소가 속한 사용자 이름을 찾으려고합니다.

저는 이미 LDAP에서 LDAP를 사용하여 LDAP에 연결할 수있었습니다.

+1

이상한 요구 사항. 사용자는 하나의 IP 주소에서만 로그인 할 수 있습니까? 디렉토리에있는 사용자의 IP 주소도 * 가지고 있습니까? 그렇다면 어떤 속성입니까? – EJP

+1

_browser_는 IP 주소를 보내지 않지만 _server_는 각 요청에 대해 원격 클라이언트 IP를 기록합니다. 믿을만한 것은 아닙니다 : 프록시 (역방향), NAT 등을 생각하십시오. – mvreijn

답변

1

EJP으로 의견을 읽고 먼저 요구 사항을 다시 생각해보십시오.

에 관계없이 의 당신이 원하는 이유, 당신은 몇 가지 단계에 응시해야합니다 :

  • 은 사용자가 컨텍스트 (LDAP 컨테이너를) 찾기

    . 광고 기본값은 cn=Users,dc=your,dc=domain,dc=com입니다.
  • 가 IP 주소를 포함하는 LDAP 속성을 확인
  • 는 HTTP 요청에서 IP 주소를 검색 (의 지금은 networkAddress을 가정 해 봅시다)
  • 필터 (&(objectClass=inetOrgPerson)(networkAddress=userAddress))를 사용하여 (사용자) 개체에 대한 쿼리를 수행 (의이 String userAddress을 가정 해 봅시다)

귀하의 자바 코드는 다음과 같을 것이다 (당신이 언급 한대로 라이브 LdapConnection 개체가 가정) :

public void getUserByIp(LdapContext ctx, String userAddress) 
{ 
    // Replace with your context and domain name 
    String userContext = "cn=Users,dc=your,dc=domain,dc=com"; 

    String filter = "(&(objectClass=inetOrgPerson)(networkAddress="+userAddress+"))"; 
    // You are trying to find a single user, so set the controls to return only on instance 
    SearchControls contr = new SearchControls(); 
    contr.setCountLimit(1L); 
    try 
    { 
    NamingEnumeration<SearchResult> results = ctx.search(userContext, filter, contr); 
    while (results.hasMore()) 
    { 
     // User found 
     SearchResult user = results.next(); 
    } else { 
     // No user found 
    } 
    } catch (NamingException e) { 
     // If there is more than one result, this error will be thrown from the while loop 
    } 
}