将Crendentials从dotNet客户端传递到Java Web Service

jav*_*ava 2 c# java web-services jax-ws

我有一个调用java Web服务的dot net应用程序.我试图通过将凭据传递给Java服务来实现身份验证.以下是设置凭据的点网代码.如何在我的Java应用程序中获取这些凭据?它们没有设置在标题中......

 System.Net.NetworkCredential serviceCredentials = new NetworkCredential("user", "pass");
 serviceInstance.Credentials = serviceCredentials;
Run Code Online (Sandbox Code Playgroud)

serviceInstance是SoapHttpClientProtocol的一个实例.

我试过像这样注入WebServiceContext

@Resource
WebServiceContext wsctx;
Run Code Online (Sandbox Code Playgroud)

并从标题中拉出创意,但他们不在那里.

cle*_*ris 5

您没有以正确的方式将凭据传递给您的服务.要获取Authorize http请求标头,请执行以下操作:

// Create the network credentials and assign
// them to the service credentials
NetworkCredential netCredential = new NetworkCredential("user", "pass");
Uri uri = new Uri(serviceInstance.Url);
ICredentials credentials = netCredential.GetCredential(uri, "Basic");
serviceInstance.Credentials = credentials;

// Be sure to set PreAuthenticate to true or else
// authentication will not be sent.
serviceInstance.PreAuthenticate = true;
Run Code Online (Sandbox Code Playgroud)

注意:请务必设置PreAuthenticate为true,否则将不会发送身份验证.有关更多信息,请参阅此文章.

我不得不为这一个挖掘一些旧代码:)

更新: 根据下面的注释中的建议使用fiddler检查请求/响应头WWW-Authenticate之后,Java Web服务端缺少一个头.

本文中使用SoapHeaderInterceptor(Apache CXF拦截器)可以找到实现"JAX-WS基本身份验证"的更优雅方式

  • 您可以使用[fiddler](http://www.telerik.com/fiddler)等工具检查http流量,然后更新您的问题以包含请求/响应标头吗?这样可以更容易地查看问题是在客户端还是服务器端 (2认同)