2011-12-29 4 views
6

원격 URL에서 RSS 피드를로드하는 Tomcat 6에서 실행되는 Java webapp가 있습니다.Java 프록시 인증

나는 RSS 피드와 다른 형식을 처리하기 위해 Rome을 사용합니다. 연결 부분은 다음과 같습니다.

코드는 프록시를 사용하는이 새로운 클라이언트를 제외하고는 정상적으로 작동합니다.

가 프록시를 사용하기 위해, 나는 http.proxyHost를하고 프락시 포트 시스템 속성을 설정합니다

System.setProperty("http.proxyHost", proxyHost); 
System.setProperty("http.proxyPort", proxyPort); 
System.setProperty("https.proxyHost", proxyHost); 
System.setProperty("https.proxyPort", proxyPort); 

는 HTTP GET 괜찮아 프록시로 구성되어,하지만 지금은 (불량 게이트웨이 HTTP를 502 오류가 발생하거나 비슷한 것).

Wireshark로 HTTP 교환을 분석하면 프록시에서 인증이 필요하다는 것을 알았습니다. 그것은 HTTP 507을 보냅니다. Java는 어떻게 든 인증을 시도하지만 잘못된 사용자 이름과 암호를 사용합니다. 내가 모르는 비밀 번호와 마찬가지로 호스트 이름을 사용자 이름으로 사용하는 것 같습니다.

Authenticator.setDefault(new Authenticator() { 
      @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 
       logger.info(MessageFormat.format("Generating PasswordAuthentitcation for proxy authentication, using username={0} and password={1}.", username, password)); 
       return new PasswordAuthentication(username, password.toCharArray()); 
      } 
     }); 

은 이제 내 문제는 그것이

을 무시된다 :

그래서 나는 사용자 이름 + 암호를 지정하는 인증 자 메소드를 구현하기 위해 노력했다. getPasswordAuthentication 메소드가 호출되지 않습니다. 로깅 구문이 로그 파일에 표시되지 않고 Wireshark를 사용하여 호스트 이름을 여전히 사용자 이름으로 사용하고 있음을 알 수 있습니다.

왜? 자바는 Authenticator와상의하지 않고 자체적으로 인증을 시도하는 것 같습니다.

프록시는 인증에 NTLM을 사용하는 MS 장치 인 것 같습니다. 이것을 처리 할 자바 내장 메커니즘이 있습니까? 응용 프로그램이 실행되는 컴퓨터는 Windows Server 2008 R2입니다.

답변

12

NTLM 기반 프록시에서 인증 할 때도 마찬가지입니다.

프록시의 인증은 실제로는 보통 HTTP 기본 인증입니다. 속임수를 썼는지, 함께 프록시 JVM 설정으로,

protected URLConnection newURLConnection(URL pURL) throws IOException { 
    URLConnection urlConnection = super.newURLConnection(pURL); 

    String auth = new String(Base64.base64Encode(new String("username:password").getBytes())); 
    auth = "Basic " + auth; 
    urlConnection.setRequestProperty("Proxy-Connection","Keep-Alive"); 
    urlConnection.setRequestProperty("Proxy-Authorization",auth); 
    return urlConnection; 
} 

그 :

우리는 다음과 같은 방법을 사용했다.

http://en.wikipedia.org/wiki/Basic_access_authentication을 참조하십시오.

+0

고맙습니다. 그것은 우리를 위해 일합니다. –