0

現在、resteasy を使用して呼び出すいくつかの URI があります。これは次のようになります。

http://host.com/api/project1/getsomestuff

http://host.com/api/project2/getsomestuff

どちらもダイジェスト認証を使用しますが、認証には異なるユーザー名とパスワードが必要です。現在、コードでは、次のようにプロジェクトごとに異なるクライアント インスタンスを作成して、これを処理する必要があります。

DefaultHttpClient project1Client = new DefaultHttpClient();
Credentials project1Credentials = new UsernamePasswordCredentials("user1", "password1");
project1Client.getCredentialsProvider().setCredentials(AuthScope.ANY, project1Credentials);
ClientExecutor executor1 = new ApacheHttpClient4Executor(project1Client);
MyService project1Proxy = ProxyFactory.create(MyService.class, executor1);
project1Proxy.getSomeStuff("project1");

DefaultHttpClient project2Client = new DefaultHttpClient();
Credentials project2Credentials = new UsernamePasswordCredentials("user2", "password2");
project2Client.getCredentialsProvider().setCredentials(AuthScope.ANY, project1Credentials);
ClientExecutor executor2 = new ApacheHttpClient4Executor(project1Client);
MyService project2Proxy = ProxyFactory.create(MyService.class, executor2);
project2Proxy.getSomeStuff("project2");

私は AuthScope と CredentialsProvider を調べましたが、これがどのように可能になるかわかりません。同じクライアントを使用して両方の資格情報のセットを使用する方法を知っている人はいますか、それとも複数のクライアントを使用して立ち往生していますか?

また、私はこの残りの呼び出しのサーバー側を制御しておらず、両方の呼び出しで同じレルムを使用しているため、レルムごとに異なる資格情報を設定できないことに注意してください。

4

2 に答える 2

1

I think you are out of luck. Looking through the docs you cannot create an Authscope which sends a different password to different paths on the same host and port.

于 2012-08-09T20:37:49.613 に答える
1

これらのアプリケーションが異なるセキュリティ コンテキストを持っている場合は、異なる認証レルムを持っている可能性もあります (または、少なくともそうであると予想されます)。AuthScope オブジェクトにレルム属性を明示的に設定して、特定のレルム名を持つ特定の認証コンテキストに明示的に一致させることができます。

于 2012-08-10T12:13:10.110 に答える