2

wsdl2java と cxf codegen プラグインを使用して、ws-security で保護されたサービスのクライアントを作成しています。

自動生成されたクライアント クラス (OrganisationsEinheitenCoreService) を介してサービスを呼び出すのは非常に簡単です。

OrganisationsEinheitenCoreService service = new OrganisationsEinheitenCoreService();
IOrganisationsEinheitenCoreService serviceEndpoint = service.getServiceEndpoint();

BindingProvider bindingProvider = (BindingProvider) serviceEndpoint;

Map<String, Object> ctx = bindingProvider.getRequestContext();
ctx.put("ws-security.username", "MyUsername");
ctx.put("ws-security.password", "MyPassword");

ArrayOfStaat staaten = serviceEndpoint.getStaaten();

サービスからメソッド「getStaaten」を呼び出すと、cxf はユーザー名とパスワードを含む SecurityContextToken を自動的に要求します (アクション = http://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/SCT ) 。 、実際のメソッド「getStaaten」を呼び出す前。サービスから SCT を受信した後、cxf は sct を保存し、次の呼び出しに使用します。

何らかの理由で、cxf はhttp://docs.oasis-open.org/ws-sx/ws-trust/200512/RST/SCT/Cancelを呼び出して SCT を終了することはありません。また、これを明示的に行う方法もわかりませんでした。クラスで try-with-resource を実行したり、クライアントを取得して close メソッドを呼び出したりするなど、いくつかのことを試しました。

通常、SCT は一定の時間が経過すると自動的に期限切れになりますが、残念ながら、サービスを呼び出した直後に SCT を閉じる必要があります。

何か案は?

4

1 に答える 1

0

発行されたトークンを表す SecurityToken オブジェクトを取得および保存する単純なインターセプターを作成できます。その後、CXF STSClient クラスを使用して明示的にキャンセルできます。これらのテストのいくつかはあなたを助けるかもしれません:

https://git-wip-us.apache.org/repos/asf?p=cxf.git;a=blob;f=systests/ws-security/src/test/java/org/apache/cxf/systest/ ws/wssc/WSSCUnitTest.java;h=3d524675b3b0ae435282e599f4d099338e24ede6;hb=HEAD

于 2016-03-14T11:58:28.013 に答える