2009-03-01 8 views
14

기본 인증을 사용하는 REST 인터페이스와 대화하는 Eclipse 플러그인을 빌드 중입니다. 인증이 실패하면 플러그인 설정 대화 상자를 팝업하고 다시 시도하고 싶습니다. 일반적으로 모든 HttpURLConnection에 대해 인증자를 설정하기 위해 정적 Authenticator.setDefault()을 사용할 수 있지만 플러그인을 작성하고 있으므로 Eclipse의 기본값을 덮어 쓰지 않으려 고합니다. Authenticator (org.eclipse.ui.internal.net.auth);Java Authenticator는 연결 단위로 제공됩니까?

Eclipse의 기본 설정을로드하고 퍼팅하기 전에 내 사용자 설정 Authenticator을 생각했지만, 이것이 멀티 쓰레딩과 관련된 모든 종류의 경쟁 문제를 일으킬 것이라고 생각합니다. 그래서 그 개념을 빨리 잃어 버렸습니다.

Google 검색 결과의 모든 종류는 기본적으로는 불가능 말해 수율 :

setAuthenticator (인증 자) 쉽게 멀티 스레드 컨텍스트 곳에서이 클래스를 사용할 수 있도록하기위한 방법이 있어야합니다 자바의 URLConnection의 API 인증이 필요합니다.

Source

응용 프로그램은 몇 가지 타사 플러그인과 각 플러그인에 우리가 무엇을해야 자신의 OTP를 사용 포함되어있는 경우 ? "Authenticator.setDefault()"메소드를 호출 할 때마다 이전

Source

날이 문제를 극복 할 수있는 다른 방법이 있습니까 ... 인증 자 정의 재 작성?

+0

+1 동일한 문제가 있습니다. 매우 짜증나! –

답변

8

HttpURLConnection에서 가능하지 않은 경우 Apache의 httpclient 라이브러리를 사용하는 것이 좋습니다.

빠른 예 :

HttpClient client = new HttpClient(); 
client.getState().setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("test","test")); 
GetMethod getMethod = new GetMethod("http://www.example.com/mylogin"); 
client.executeMethod(getMethod); 
System.out.println(getMethod.getResponseBodyAsString()); 
+0

예 아파치 commoms http 클라이언트는 JRE 기본 HttpURLConnection이 문제가 onovercomeable 경우이 문제를 사용하여 정착했다. 답변을 주셔서 감사합니다! –

+0

마지막으로 타사 Http 클래스를 선택하는 것이 유일한 실행 가능한 솔루션 이었으므로 귀하의 대답을 수락 할 것입니다. –

1

또 다른 방법은 연결에서 기본 인증을 직접 수행하는 것입니다.

final byte[] encodedBytes = Base64.encodeData((username + ':' + new String(password)).getBytes("iso-8859-1")); 
    final String encoded = new String(encodedBytes, "iso-8859-1"); 

    connection.setRequestProperty("Authorization", "Basic " + encoded); 

이것은 또한 후속 요청에 자격 증명을 제공하기 전에 401를받을 수있는 인증되지 않은 요청을 필요로하지 않는 장점이있다. 선행 인증을 요청하면 apache http-client에서 유사한 동작을 이용할 수 있습니다.