基于每个连接的Java身份验证器?

Mar*_*man 14 java httpurlconnection authenticator

我正在构建一个与使用基本身份验证的REST接口对话的Eclipse插件.当身份验证失败时,我想弹出我的插件的设置对话框并重试.通常我可以使用静态Authenticator.setDefault()为所有人设置一个身份验证器HttpURLConnection,但是因为我正在编写一个插件,所以我不想覆盖Eclipse的默认值Authenticator(org.eclipse.ui.internal.net.auth);

我想Authenticator在加载之前设置我的自定义并在之后放回Eclipse的默认值,但我想这将导致多线程的种类问题,所以我很快就失去了这个概念.

Google搜索会产生各种结果,基本上告诉我这是不可能的:

Java URLConnection API应该有一个setAuthenticator(Authenticator)方法,以便在需要身份验证的多线程上下文中更容易地使用此类.

资源

如果应用程序包含很少的第三方插件,并且每个插件都使用自己的Authenticator,我们应该做什么?每次调用"Authenticator.setDefault()"方法都会重写以前定义的Authenticator ...

资源

是否有任何不同的方法可以帮助我克服这个问题?

小智 9

如果无法使用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());
Run Code Online (Sandbox Code Playgroud)