使用NTLM身份验证使用肥皂服务 [英] Consuming soap service with NTLM Authentication

查看:99
本文介绍了使用NTLM身份验证使用肥皂服务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过创建NTLM引擎来使用具有NTLM身份验证的SOAP服务(按照 http://hc.apache.org/httpcomponents-client-4.3.x/ntlm.html )实现了AuthSchemeFactory并最终将AuthSchemeFactory注册到了我的HTTP客户端.当我使用HTTP客户端访问该服务时,收到以下响应:状态码-415,消息-服务器不支持该请求,因为媒体类型不受支持."

I am trying to consume a SOAP service with NTLM authentication by creating a NTLM engine (following instructions on http://hc.apache.org/httpcomponents-client-4.3.x/ntlm.html ) implemented AuthSchemeFactory and finally registered the AuthSchemeFactory to my HTTP Client. When I hit the service using my HTTP Client I get a reponse that "Status code - 415 , Message - The server cannot service the request because the media type is unsupported."

任何人都可以告诉我如何解决此不受支持的媒体问题,以在Java平台上使用受NTLM保护的SOAP Web服务.使用JCIFS是使用NTLM受保护服务的正确选项还是有更好的方法.提前致谢.

Can anybody tell how can I fix this issue of unsupported media to consume a NTLM-protected SOAP web service on Java platform. Is using JCIFS a correct option to conmsume NTLM protected service or are there any better approach(s). Thanks in advance.

    DefaultHttpClient httpclient = new DefaultHttpClient();

    httpclient.getAuthSchemes().register(AuthSchemes.NTLM,
            new JCIFSNTLMSchemeFactory());

    CredentialsProvider credsProvider = new BasicCredentialsProvider();
    NTCredentials ntcred = new NTCredentials("USERNAME", "PASSWORD",
            "HOST", "DOMAIN");

    credsProvider.setCredentials(new AuthScope("HOST", 443,
            AuthScope.ANY_REALM, "NTLM"), ntcred);

    httpclient.setCredentialsProvider(credsProvider);

    httpclient.getParams().setParameter(
            CoreProtocolPNames.HTTP_CONTENT_CHARSET, "UTF-8");

    Writer writer = new StringWriter();
        writer.write("MY SOAP REQUEST BODY");

    HttpPost httppost = new HttpPost(
            "https://<HOST_NAME>/XiPay30WS.asmx");
    httppost.setEntity(new StringEntity(writer.toString()));

    httppost.setHeader("Content-Type",
                "application/x-www-form-urlencoded");

    HttpResponse httpresponse = httpclient.execute(
                new HttpHost("HOST", 443, "https"),
                httppost, new BasicHttpContext());

    String statusCode = httpresponse.getStatusCode();

推荐答案

如果使用Spring WS支持:

If you use Spring WS support:

检查此解决方案 http://dolszewski.com/spring/sharepoint-web-services-spring-and-ntlm-authentication/

@Bean("navisionMessageSender")
public HttpComponentsMessageSender httpComponentsMessageSender() {
    HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender();
    String user = env.getProperty("navision.endpoint.user");
    String password = env.getProperty("navision.endpoint.password");
    String domain = env.getProperty("navision.endpoint.domain");
    NTCredentials credentials = new NTCredentials(user, String.valueOf(password), null, domain);
    httpComponentsMessageSender.setCredentials(credentials);
    return httpComponentsMessageSender;
}

这篇关于使用NTLM身份验证使用肥皂服务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆