2009-07-22 5 views
5

Java로 나머지 웹 서비스를 사용하고 도메인 사용자 계정의 자격 증명을 전달해야합니다.java UrlConnection을 사용하여 ntlm (또는 kerberos)으로 인증

지금 내가 어떻게 자바로 이것을 달성 할 수


set xmlHttp = server.createObject("msxml2.serverxmlhttp") 
xmlHttp.open method, url, false, domain & "\" & user, password 
xmlHttp.send body 
out = xmlHttp.responseText 
set xmlHttp = nothing 

와 asp.net



HttpWebRequest request = (HttpWebRequest) WebRequest.Create(url); 

request.Credentials = new NetworkCredential(user, password, domain); 

request.Method = WebRequestMethods.Http.Get 

HttpWebResponse response = (HttpWebResponse) request.GetResponse(); 

StreamReader outStream = new StreamReader(response.GetResponseStream(), Encoding.UTF8) ; 

output = outStream.ReadToEnd(); 

클래식 ASP를

로하고 있어요? 내가 현재 로그인 한 사용자의 자격 증명을 사용하고 있지 않다는 것을 고려하면 도메인 계정을 지정하고 있습니다. (암호가 있습니다)

고전적인 asp 및 asp.net을 사용하면 쉽습니다. ..

답변

0

this page에 따르면 으로 기본 JRE 클래스를 사용하며 이전 버전의 Java에서는 Windows 시스템에서만이 작업을 수행 할 수 있습니다.

그러나 타사 종속성을 갖고 살고 싶다면 IMO Apache Commons HttpClient 3.x이 좋습니다. Here은 NTLM을 비롯한 인증 사용에 대한 설명서입니다. 일반적으로 HttpClient는 훨씬 더 기능적인 라이브러리입니다.

HttpClient를의 최신 버전은 4.0입니다

하지만 분명히이 버전 does not support NTLM이 버전 requires a tiny bit of extra work. 여기

내가 그것을 시도하지 않은 비록 내가 코드의 모습 생각 것입니다 :

HttpClient httpClient = new HttpClient(); 
httpClient.getState().setCredentials(AuthScope.ANY, new NTCredentials(user, password, hostPortionOfURL, domain)); 
GetMethod request = new GetMethod(url); 
BufferedReader reader = new InputStreamReader(request.getResponseBodyAsStream()); 

행운을 빕니다.

+0

이봐 매트, 감사 답변에 대한 많은,하지만 대신 NTLM의 Kerberos를 사용하여 건설 장-에서 JRE 클래스와,이 작업을 수행 할 수 있는지 궁금 .. 내 말은, kerberos는 NTLM과 같은 ptopietary 물건이 아닙니다 ... – opensas

+0

아파치 클라이언트는 NTLMv2를 지원하지 않는다고 들었습니다. 또한 그들은 a) LGPLv2가 라이센스와 호환되지 않는다고 주장하고 b) 일반적으로 MS 제품에 지쳐 있기 때문에 JCIFS를 활용하는 것을 꺼려합니다. 그러나 NTLM이 Microsoft와 상호 작용하려는 경우 NTLM이 인증 메커니즘의 공통 분모이기 때문에 중요하지 않습니다.클라이언트가 도메인 컨트롤러에 액세스 할 수 없거나 시간 동기화가 꺼져 있거나 DNS가 적합하지 않은 경우 등 Kerberos가 작동하지 않습니다. – user8134

+0

안녕하세요 ioplex. 나는 당신이 이것을 들었던 곳이 확실하지 않지만 그것이 틀렸다. 연결된 문서를 확인하십시오. 나는 HttpClient 3.x와 4.0 모두 NTLM을 성공적으로 사용했다. –

-2

SPNEGO HTTP Servlet Filter 프로젝트의 SpnegoHttpURLConnection 클래스를 살펴보십시오. 이 프로젝트에는 몇 가지 예가 있습니다.

이 프로젝트의 예는 client library입니다. java.net.URLStreamHandler의와의 java.net.URL에 대한 호환 솔루션 com.intersult.net.http.NtlmHandler입니다

public static void main(final String[] args) throws Exception { 
    final String creds = "dfelix:[email protected]"; 

    final String token = Base64.encode(creds.getBytes()); 

    URL url = new URL("http://medusa:8080/index.jsp"); 

    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

    conn.setRequestProperty(Constants.AUTHZ_HEADER 
      , Constants.BASIC_HEADER + " " + token); 

    conn.connect(); 

    System.out.println("Response Code:" + conn.getResponseCode()); 
} 
+0

실제로 conn.setRequestProperty ("Authorization", "Basic"+ ""+ token) 코드가있는 라이브러리는 사용하지 않습니다. – Daniel

+2

이 질문에 대답하지 않습니다. 이 솔루션은 기본 인증을 위해 작동하지만 Kerbos 또는 NTLM 인증에 대해서는 질문하는대로 작동하지 않습니다. –

0

javadoc 내에서 모양이 예제를 가지고 ... :

NtlmHandler handler = new NtlmHandler(); 
handler.setUsername("domain\\username"); 
handler.setPassword("password"); 
URL url = new URL(null, urlString, handler); 
URLConnection connection = url.openConnection(); 

또한 url.openConnection (proxy) 내에서 java.net.Proxy를 사용할 수 있습니다.

Maven을 사용하여 종속성 :

<dependency> 
     <groupId>com.intersult</groupId> 
     <artifactId>http</artifactId> 
     <version>1.1</version> 
    </dependency> 
관련 문제