Java 取消安全上下文令牌(SCT/取消)

Java 取消安全上下文令牌(SCT/取消),java,cxf,ws-security,wsdl2java,security-context-token,Java,Cxf,Ws Security,Wsdl2java,Security Context Token,我们正在使用wsdl2java和cxf codegen插件为受ws-security保护的服务创建一个客户端 通过自动生成的客户端类(OrganizationSeInheitencoReservice)调用服务非常简单: OrganisationsEinheitenCoreService service = new OrganisationsEinheitenCoreService(); IOrganisationsEinheitenCoreService serviceEndpoint = s

我们正在使用wsdl2java和cxf codegen插件为受ws-security保护的服务创建一个客户端

通过自动生成的客户端类(OrganizationSeInheitencoReservice)调用服务非常简单:

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();
OrganizationSeinheitencoReservice服务=新组织SeinheitencoReservice();
IOrOrganizationSeinheitencoReservice serviceEndpoint=service.getServiceEndpoint();
BindingProvider BindingProvider=(BindingProvider)serviceEndpoint;
Map ctx=bindingProvider.getRequestContext();
ctx.put(“ws-security.username”、“MyUsername”);
ctx.put(“ws-security.password”、“MyPassword”);
ArrayOfStaat staten=serviceEndpoint.getstaten();
从服务调用方法“GetStataten”时,cxf会在调用实际方法“GetStataten”之前自动请求一个带有用户名和密码的SecurityContextToken(操作=)。从服务接收到SCT后,cxf存储SCT并将其用于下一次呼叫

由于某些原因,cxf从不调用终止SCT。我们也不知道如何显式地做到这一点,我们尝试了几种方法,比如使用类try with resource,或者获取客户机并调用close方法

SCT通常在一定时间后自行过期,不幸的是,我们需要在调用服务后立即关闭它们


有什么想法吗?

您可以编写一个简单的拦截器来检索并存储表示已发布令牌的SecurityToken对象。然后可以使用CXF STSClient类显式取消它。其中一些测试可能会帮助您: