2009-03-01 15 views
14

基本認証を使用するRESTインターフェイスと通信するEclipseプラグインをビルドしています。認証が失敗すると、私はプラグインの設定ダイアログをポップアップして再試行したいと思います。私はプラグインを書いているので、私はEclipseのデフォルトを上書きしたくありません。Authenticatororg.eclipse.ui.internal.net.auth);私はプラグインを書いているので、私はEclipseのデフォルトを上書きしたくありません。Authenticatororg.eclipse.ui.internal.net.auth);接続ごとのJava認証プロバイダ?

Eclipseのデフォルトをロードして後で戻す前に私のカスタムAuthenticatorを設定すると思っていましたが、これがマルチスレッドのあらゆる種類のレースの問題を引き起こすと思います。

、Googleの検索結果のすべての種類は、基本的にそれは不可能です私に言って、収率:

setAuthenticator(認証)、それが簡単にマルチスレッドコンテキストどこでこのクラスを使用するために製造するための方法を持っていなければならないのJavaのURLConnection API認証が必要です。

Source

のアプリケーションは、いくつかのサードパーティ製のプラグインが含まれており、それぞれのプラグインは、私たちが何をすべきか、独自の認証を使用する場合は? 「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

yeah apache commoms httpクライアントは、JREのデフォルトのHttpURLConnectionでこの問題がonovercome可能である場合に、私が使用して解決したものです。しかし、答えをありがとう! –

+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で同様の動作を利用することができます。

関連する問題