0

나는 web.xml에서 다이제스트 인증으로 보안 처리 한 솔라 서버를 가지고 있으며 자바에서 solr을 호출해야한다. 오늘 많은 수의 실을 읽고 많은 예를 들었지만 운이 없었습니다.아파치 httpcomponents 다이제스트 인증 실패, 오래된 httpclient 작동

이 코드는 commons-httpclient 3.1과 작동하며 200 OK입니다.

URL url = new URL(solrUrl); 

    HttpClient httpClient = new HttpClient(new MultiThreadedHttpConnectionManager()); 
    httpClient.getState().setCredentials(new AuthScope(url.getHost(), url.getPort(), AuthScope.ANY_SCHEME), 
      new UsernamePasswordCredentials(user, password)); 

    HttpMethod method = new GetMethod(solrUrl); 
    int responseCode = httpClient.executeMethod(method); 
    System.out.println(responseCode); 

하지만 아파치 httpcomponent로 수행하려고 할 때 4.2.2 나는 항상 401 권한이 없습니다. 이것은 공식적인 예와 거의 동일합니다.

 DefaultHttpClient httpclient = null; 
    try 
    { 
     URL url = new URL(solrUrl); 
     HttpHost targetHost = new HttpHost(url.getHost(), url.getPort(), url.getProtocol()); 
     httpclient = new DefaultHttpClient(); 
     UsernamePasswordCredentials creds = new UsernamePasswordCredentials(user, password); 
     httpclient.getCredentialsProvider().setCredentials(
       new AuthScope(targetHost.getHostName(),targetHost.getPort()), 
       creds); 


     HttpGet httpget = new HttpGet(solrUrl); 
     HttpResponse response = httpclient.execute(targetHost,httpget); 
     HttpEntity entity = response.getEntity(); 
     System.out.println(response.getStatusLine()); 
     EntityUtils.consume(entity); 

     httpget.releaseConnection(); 


    } catch (ClientProtocolException e) 
    { 
     e.printStackTrace(); 
    } catch (IOException e) 
    { 
     e.printStackTrace(); 
    } finally 
    { 
     httpclient.getConnectionManager().shutdown(); 
    } 

또한 HttpUrlConnection을 사용하여 동일한 401을 얻으려고 시도했습니다.

Authenticator authenticator = new Authenticator() 
    { 
     protected PasswordAuthentication getPasswordAuthentication() 
     { 
      PasswordAuthentication pa = new PasswordAuthentication(user, password.toCharArray()); 
      System.out.println("calling solr with user:pass " + pa.getUserName() + ":******"); 
      return pa; 
     } 
    }; 

    Authenticator.setDefault(authenticator); 
    try 
    { 
     URL url = new URL(solrUrl); 
     HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
     conn.setRequestMethod("GET"); 
     conn.setRequestProperty("type", "submit"); 
     conn.setDoOutput(true); 

     conn.connect(); 
    System.out.println(conn.getResponseCode()); 


     conn.disconnect(); 
    } catch (MalformedURLException mue) 
    { 
     mue.printStackTrace(); 
    } catch (IOException ioe) 
    { 
     ioe.printStackTrace(); 
    } catch (Exception e) 
    { 
     e.printStackTrace(); 
    } 

나는

어떤 도움 .. 내가 포기하는 과정에있어, 때문에 클래스 경로 문제의 아파치 httpcomponents 4를 사용하려면?

답변

1

내 자신을 응답 : 은 분명히 내가 JDK + 바람둥이 버그의 조합을 공격했습니다는 JDK 1.6.0_45-B06와 톰캣 7.0.34 무슨 일이 있었

java bug

tomcat bug

, 7.0.41에 tomcat을 고쳐라.

+0

감사합니다. 나는 지난 2 일 동안 이것을 강조했다. 내가 필요한 모든 것은 최신 바람둥이를 얻는 것이었다. – hajime