Отменить токен контекста безопасности (SCT/ Отмена)
Мы используем wsdl2java и плагин codex cgen для создания клиента для защищенной службы 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 с именем пользователя и паролем (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. Мы также не могли понять, как это сделать явно, мы попробовали несколько вещей, таких как try-with-resource с классом, или получение клиента и вызов метода close.
SCT обычно устаревают сами по себе через определенное время, к сожалению, мы должны закрыть их сразу после вызова службы.
Есть идеи?
1 ответ
Вы можете написать простой перехватчик для извлечения + сохранения объекта SecurityToken, представляющего выданный токен. Затем вы можете явно отменить его, используя класс CXF STSClient. Некоторые из этих тестов могут помочь вам: