如何使用JAX-WS / SOAP对Web服务客户端进行身份验证

时间:2013-01-08 17:32:51

标签: java web-services java-ee servlets

我是网络服务新手并尝试了一些教程。但是当我尝试访问HTTPS安全SOAP Web服务时,我偶然发现了巡逻。我可以使用我的浏览器和Netbeans访问WSDL,并使用我从提供商处恢复的登录名/密码。

Netbeans生成服务/模式类(通过身份验证),我在Glassfish 3.1.2上运行我的客户端。我添加了一个Servlet来访问服务。但是我在尝试访问服务和WSDL时收到了HTTP响应代码:401(=未授权)。该服务确实连接到HTTPS,但错误告诉HTTP

添加用户名/密码以访问Web服务的正确方法是什么?

Servlet的服务提供者

private static LogicalModel pullpullEnterpriseService() {
    pullEnterpriseService service = new pullEnterpriseService();        
    ClientPullSoapBinding port = service.getClientPullSoapBinding();        

    BindingProvider prov = ((BindingProvider)port);
    prov.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "myuser");
    prov.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "mypassword");

    return port.getDataModel();
}

我尝试在SOAP标头中提供用户/密码,但结果相同

    ...
    Map<String, Object> req_ctx = ((BindingProvider)port).getRequestContext();        

    Map<String, List<String>> headers = new HashMap<String, List<String>>();
    headers.put("Username", Collections.singletonList("myuser"));
    headers.put("Password", Collections.singletonList("mypassword"));
    req_ctx.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
    ...

我看过这些帖子,但他们没有解决我的问题:

How do I add a SOAP Header using Java JAX-WS

http://www.mkyong.com/webservices/jax-ws/application-authentication-with-jax-ws/

1 个答案:

答案 0 :(得分:4)

您可以尝试在项目中本地存储WSDL。

请参阅Consuming a Web Service with Java 6 and JAX-WS - Wiki - Confluence中的示例。

然后您可以使用指定端点地址和HTTP基本授权部分中的方式,就像您问题中的第一个代码一样。

我希望这对你有所帮助。