JAX-WS客户端请求STS而不使用wsdl,ntlm协议 - Java

时间:2016-05-26 14:15:07

标签: java web-services mule cxf jax-ws

我无法从安全令牌服务请求声明。

我的设置如下: 我必须调用一个ADFS(在提供wsdl的生产中)获得一个声明,我可以用它来调用另一个服务,该服务为我提供了一个从提供者请求信息的密钥。但是在测试环境中,我获得了一个类似于ADFS的STS服务,但它没有提供wsdl,它很简单没有wsdl我被告知。因此,我给出的唯一信息是,我必须以kerberosntlmusername方式呼叫STS。所以我的问题是,当我没有wsdl时如何做到这一点?

我获得了一个调用的网址,例如https://server:port/ActiveSts/ntlmhttps://server:port/ActiveSts/username这些是我可以在请求令牌之间选择的选项。我尝试过这样的事情:

    SpringBusFactory springBusFactory = new SpringBusFactory();
    Bus bus = springBusFactory.createBus();

    STSClient stsClient = new STSClient(bus);
    stsClient.setLocation("https://server:port/ActiveSts/username");
    stsClient.setSoap12();
    stsClient.setKeyType(STSConstants.BEARER_KEY_KEYTYPE);


    bus.setProperty(SecurityConstants.STS_CLIENT, stsClient);
    //bus.setProperty(SecurityConstants.STS_APPLIES_TO, "https://server:port/ActiveSts/username");      
    bus.setProperty(SecurityConstants.USERNAME, "username");
    bus.setProperty(SecurityConstants.PASSWORD, "password");        

    SecurityToken securityToken = stsClient.requestSecurityToken();

    System.out.println(securityToken.toString());

但它不起作用,我在搜索网页时发现的所有相关内容都包含wsdl

修改-1: 我们现在遇到的错误:

  

线程“main”中的异常org.apache.cxf.binding.soap.SoapFault:The   由于内部错误,服务器无法处理请求。   有关错误的更多信息,请打开   IncludeExceptionDetailInFaults(来自ServiceBehaviorAttribute   或者来自服务器上的配置行为)   命令将异常信息发送回客户端,或打开   根据Microsoft .NET Framework SDK文档进行跟踪   检查服务器跟踪日志。在   org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:84)     在   org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:51)     在   org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:40)     在   org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)     在   org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113)     在   org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)     在   org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)     在   org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)     at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:849)     在   org.apache.cxf.transport.http.HTTPConduit $ WrappedOutputStream.handleResponseInternal(HTTPConduit.java:1626)     在   org.apache.cxf.transport.http.HTTPConduit $ WrappedOutputStream.handleResponse(HTTPConduit.java:1515)     在   org.apache.cxf.transport.http.HTTPConduit $ WrappedOutputStream.close(HTTPConduit.java:1317)     在   org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)     在   org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:632)     在   org.apache.cxf.interceptor.MessageSenderInterceptor $ MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)     在   org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)     在org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:572)     在org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:481)at   org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:382)at at   org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:335)at at   org.apache.cxf.ws.security.trust.AbstractSTSClient.issue(AbstractSTSClient.java:855)     在   org.apache.cxf.ws.security.trust.STSClient.requestSecurityToken(STSClient.java:62)     在   org.apache.cxf.ws.security.trust.STSClient.requestSecurityToken(STSClient.java:56)     在   org.apache.cxf.ws.security.trust.STSClient.requestSecurityToken(STSClient.java:52)     在testwebservice.testprogram.main(testprogram.java:43)

0 个答案:

没有答案