webservice加入账号验证调用

本文介绍如何使用Java构建Webservice请求包并实现账号验证的过程。通过创建SOAP请求包对象,设置SOAP版本,并构造头部信息来传递用户名和密码。具体步骤包括初始化请求包、设置SOAP版本、创建头部元素、设置属性及添加用户名和密码。

注:webservice请求报文包含head和body,账号验证的部分包含在head中

//新建请求包对象envelope,指定SOAP的版本
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(SoapEnvelope.VER10);
Element[] header = new Element[1];
//创建新的元素节点,参数1:命名空间,参数2:节点命
header[0] = new Element().createElement(null, "head");
//为节点设置属性,参数1:命名空间,参数2:属性名,参数3:属性值
header[0].setAttribute(null,"xmlns", "http://testxmlns");
Element UsernameToken = new Element().createElement(null, "UsernameToken"); 
Element userName = new Element().createElement(null, "Username");
//添加子节点,参数1:节点类型,参数2:节点对象
//Node.TEXT:文本节点,Node.ELEMENT:元素节点
userName.addChild(Node.TEXT, "user123");
Element passWord = new Element().createElement(null, "Password"); 
passWord.addChild(Node.TEXT, "pass123");
passWord.setAttribute(null,"Type", "http://testtype");
UsernameToken.addChild(Node.ELEMENT, userName);
UsernameToken.addChild(Node.ELEMENT, passWord);
header[0].addChild(Node.ELEMENT, UsernameToken);
//加入头部
envelope.headerOut=header;
在Java中调用一个需要账号密码认证的WebService接口,通常可以通过多种方式实现,具体取决于所使用的WebService框架以及认证机制的类型。以下是一些常见的实现方式: 对于基于SOAPWebService,可以使用Apache Axis2、JAX-WS RI 或 Spring WebServiceClient 来进行调用,并设置用户名和密码。例如,使用JAX-WS RI时,可以通过`BindingProvider`接口来设置请求上下文中的用户名和密码信息: ```java MyService service = new MyService(); MyPort port = service.getMyPort(); BindingProvider bp = (BindingProvider) port; bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "username"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "password"); ``` 对于使用Apache HttpClient的场景,可以通过`AuthScope`和`UsernamePasswordCredentials`来配置认证信息,这种方式适用于需要为不同目标主机设置不同凭据的情况: ```java HttpClient client = HttpClientBuilder.create().build(); client.getCredentialsProvider().setCredentials( new AuthScope("hostname", 80), new UsernamePasswordCredentials("username", "password") ); ``` 此外,如果涉及到的是基于WS-Security标准的认证机制,可以使用`WSPasswordCallback`来提供密码信息。例如,在一个自定义的`CallbackHandler`中实现密码的设置: ```java public static class PasswordHandler implements CallbackHandler { public void handle(javax.security.auth.callback.Callback[] callbacks) { for (int i = 0; i < callbacks.length; i++) { WSPasswordCallback pc = (WSPasswordCallback) callbacks[i]; pc.setPassword("password"); } } } ``` 对于某些特定的环境,比如Windows下的NTLM认证,Java会尝试使用当前登录账户的信息进行认证,如果失败则会使用Java Authenticator。这种情况下可能需要额外的配置或代码调整来确保能够正确地进行身份验证[^2]。 最后,如果涉及到的是基于AJAX调用本地C# WebService并且遇到401错误,则可能是由于跨域请求或者认证配置不当引起的。需要确保服务器端正确设置了CORS(跨源资源共享)策略,并且客户端的AJAX请求包含了必要的认证信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值