웹 브라우저에서 다음 JSON URL에 액세스하는 것은 Windows 컴퓨터에서 간단합니다. 입력란에 JSON 데이터가 올바르게 표시되는 사용자 이름과 암호를 묻는 인증 상자.JSON URL이 다른 서버/도메인에서 NTLM 인증 뒤에있는 경우 Java Servlet 또는 클래스에서 외부 JSON URL을 요청하는 방법
www.json-behind-ntlm-authentication.com/view-data
이제 이것을 자바 서블릿으로 옮기려고합니다.
HttpClient 라이브러리, http://hc.apache.org을 테스트했으며, 해당 설명서에서 시도한 모든 예제가 작동하지 않습니다. 시도한 대부분의 코드는 제대로 컴파일되지 않습니다.
나는 또한 웹 스크 레이 핑을위한 매우 좋은 라이브러리이므로 Jsoup, https://jsoup.org/을 테스트했지만 NTLM 인증을받은 페이지에 액세스하는 것을 지원하지 않는 것으로 보입니다.
NTLM 인증 뒤에있는 JSON URL에 액세스하는 것과 관련하여 찾을 수있는 유일한 코드 샘플 인 https://blogs.msdn.microsoft.com/freddyk/2010/01/19/connecting-to-nav-web-services-from-java/ 코드를 테스트했습니다. 이것은 실제로 웹 서비스를 통해 Microsoft Nav 데이터에 액세스하는 Java 웹 응용 프로그램입니다. 심지어이 공식 예제도 컴파일되지 않습니다.
모든 포인터/옵션은 무엇입니까? 이 문제가 해결 된 Java 라이브러리가 있어야합니다. 액세스는 현재 HTTP를 통해 이루어 지지만 궁극적으로 보안상의 이유로 SSL을 통해 진행되므로 어떤 솔루션도 SSL 핸드 셰이크를 지원해야합니다.
LINQ, https://blogs.msdn.microsoft.com/freddyk/2009/04/20/using-linq-with-nav-web-services/을 사용하여 별도의 C# 응용 프로그램을 빌드하지 않으려 고합니다. 원하는 작업은 있지만, C# 예제는 컴파일하지 않는 Java 예제를 기반으로이 시나리오에서 작동합니다. 검색의 엄청 많이 후
UPDATE, 나는 일에 가까운 것으로 보인다 아래에 다음 코드를 발견했지만, 확실히하지 -이 파괴되는 코드의 주석을 참조하십시오. 의견에있는 포인터를 이미 보내 주셔서 감사합니다.
DefaultHttpClient httpclient = new DefaultHttpClient();
List<String> authpref = new ArrayList<String>();
authpref.add(AuthPolicy.NTLM);
httpclient.getParams().setParameter(AuthPNames.TARGET_AUTH_PREF, authpref); //ERROR - This causes an error: java.lang.VerifyError: Cannot inherit from final class
NTCredentials creds = new NTCredentials(username, password, "", domain);
httpclient.getCredentialsProvider().setCredentials(AuthScope.ANY, creds);
HttpHost target = new HttpHost(baseURL);
// Make sure the same context is used to execute logically related requests
HttpContext localContext = new BasicHttpContext();
// Execute a cheap method first. This will trigger NTLM authentication
HttpGet httpget = new HttpGet(baseURL);
HttpResponse response1 = httpclient.execute(target, httpget, localContext); //ERROR - This line is throwing an error: java.lang.VerifyError: Cannot inherit from final class
HttpEntity entity = response1.getEntity();
System.out.println(EntityUtils.toString(entity));
저는이 문제를 실제로 어떻게 해결할 수 있을지 확실하지 않습니다. 추가 포인터가 있습니까?
@codebrane 정보를 제공해 주셔서 감사합니다. 현재 웹 애플리케이션은 Spring을 사용하지 않습니다. Spring 프레임 워크를 사용하기 위해 전체 프로젝트를 마이그레이션하지 않고 결과를 얻는 방법을 알고 있습니까? 또는 Spring의이 부분을 현재 프로젝트와 통합 할 수 있습니까? –
봄 이외에 NTCredentials를 사용할 수 있습니다. 4.7.1에서 https://hc.apache.org/httpcomponents-client-ga/tutorial/html/authentication.html을 참조하십시오. NTLM 연결 지속성 – codebrane
방금 더 많은 정보로 질문을 업데이트했습니다. 언급 한 NTCredentials가 내가 가지고있는 코드에서 작업하는 것처럼 보이지만, 아직 잘 작동하지는 않습니다. 추가 포인터가 있습니까? –