将 Crendentials 从 dotNet 客户端传递到 Java Web Service
本文关键字:Java Web Service Crendentials dotNet 客户端 | 更新日期: 2023-09-27 18:34:03
我有一个调用java Web服务的dot net应用程序。我正在尝试通过将凭据传递给 java 服务来实现身份验证。这是设置凭据的点网代码。如何在我的 Java 应用程序中获取这些凭据?它们未在标题中设置...
System.Net.NetworkCredential serviceCredentials = new NetworkCredential("user", "pass");
serviceInstance.Credentials = serviceCredentials;
serviceInstance 是 SoapHttpClientProtocol 的一个实例。
我尝试过像这样注入WebServiceContext。
@Resource
WebServiceContext wsctx;
并从标题中拉出 crentials,但它们不在那里。
您没有以正确的方式将凭据传递给您的服务。为了获取授权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;
注意:请务必将PreAuthenticate
设置为 true,否则不会发送身份验证。有关详细信息,请参阅此文章。
我不得不为此挖掘一些旧代码:)
更新:按照下面的注释中的建议使用 fiddler 检查请求/响应标头后,Java Web 服务端缺少WWW-Authenticate
标头。
"JAX-WS 基本身份验证"的更优雅方法可以在本文中找到,使用SoapHeaderInterceptor
(Apache CXF 拦截器)