我們使用wsdl2java和cxf codegen插件爲受ws安全保護的服務創建客戶端。取消安全上下文令牌(SCT /取消)
調用通過自動生成的客戶端類(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的用戶名和密碼( action = 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。我們也無法弄清楚如何明確地做到這一點,我們嘗試了幾個方面,比如嘗試使用資源,或者獲取客戶端並調用close方法。
SCT通常在一段時間後自行失效,不幸的是我們需要在調用服務後立即關閉它們。
任何想法?