无法通过用户名和;密码在jax ws

时间:2014-12-05 03:52:10

标签: web-services soap

我尝试使用下面的客户端使用用户名/密码调用网络服务,但我没有看到标题中设置的用户名/密码

客户端代码

AttachmentWSImplService service = new AttachmentWSImplService();
        AttachmentWS aws = service.getAttachmentWS();
        BindingProvider bindingProvider = (BindingProvider) aws;
        SOAPBinding sopadBinding = (SOAPBinding) bindingProvider.getBinding();
        sopadBinding.setMTOMEnabled(true);

        bindingProvider.getRequestContext().put(bindingProvider.USERNAME_PROPERTY,"p3xferdt");
        bindingProvider.getRequestContext().put(bindingProvider.PASSWORD_PROPERTY,"92mnGg1Cb14D9hVhG1W5fZra4UI=");

服务器代码

    SOAPMessageContext ctx = (SOAPMessageContext) wsCtx
            .getMessageContext();
    java.util.Map<java.lang.String, java.util.List<java.lang.String>> headers = (Map<String, List<String>>) ctx
            .get(MessageContext.HTTP_REQUEST_HEADERS);
    if (headers.keySet() != null && !headers.keySet().isEmpty()) {
        Iterator<String> keys = headers.keySet().iterator();
        while (keys.hasNext()) {
            String key = (String) keys.next();
            logger.info("HeaderKey->" + key);
            logger.info("Header values->" + headers.get(key));
            // getting Basic Authentication
            String tmpusername = getUsernameFromAuthentication(key,
                    headers.get(key).toString());

1 个答案:

答案 0 :(得分:0)

代码看起来不错,应该可以正常工作。

无论如何都试图通过

访问请求标题
Headers headers = ex.getRequestHeaders();
List<String> ulist = headers.get(BindingProvider.USERNAME_PROPERTY);
List<String> plist = headers.get(BindingProvider.PASSWORD_PROPERTY);

PS:记住USERNAME_PROPERTY是来自BindingProvider接口的静态字符串,可以以静态方式访问。 (编码标准:))