私は、サービス呼び出しの前に HTTP 基本認証を要求するセキュリティ プロキシの背後にある CXF Web サービスの開発に取り組んできました。これらのサービスは相互に通信し、リクエストとレスポンスの両方で認証を必要とします。
これまでのところ、リクエストに対して HTTPConduit を介して HTTP 基本認証を次のように設定できました。
Client client = ClientProxy.getClient(port);
HTTPConduit conduit = (HTTPConduit) client.getConduit();
AuthorizationPolicy authorizationPolicy = new AuthorizationPolicy();
authorizationPolicy.setUserName(username);
authorizationPolicy.setPassword(password);
authorizationPolicy.setAuthorizationType("Basic");
conduit.setAuthorization(authorizationPolicy);
上記のメソッドは、すべてのサービス メソッド呼び出しで呼び出され、次の形式で正しい受信メッセージを取得しています。
INFO: Inbound Message
----------------------------
ID: 1
Address: http://someURL/someService?wsdl
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml; charset=UTF-8
Headers: {Accept=[*/*], Authorization=[Basic {TOKEN}],
cache-control=[no-cache], connection=[keep-alive],
Content-Length=[735], content-type=[text/xml; charset=UTF-8],
pragma=[no-cache], ...}
Payload: <soap:Envelope>...</soap:Envelope>
--------------------------------------
ただし、応答には必要なヘッダーが含まれていません
INFO: Outbound Message
---------------------------
ID: 2
Encoding: UTF-8
Content-Type: text/xml
Headers: {}
Payload: <soap:Envelope/">...</soap:Envelope>
--------------------------------------
応答 HTTP ヘッダーを変更するにはどうすればよいですか? 私はもう試した
((BindingProvider)port).getResponseContext().put(
MessageContext.HTTP_RESPONSE_HEADERS,
Collections.singletonMap("Authentication",
Collections.singletonList("Basic "+token)));
望ましい結果を得ることなく。