我在Glassfish之上创建了一个JAX-WS Web服务,它需要基本的HTTP身份验证。
现在,我想为该Web服务创建一个独立的Java应用程序客户端,但是我不知道如何传递用户名和密码。
它可以与Eclipse的Web Service资源管理器一起使用,并检查连接线,我发现了这一点:
POST /SnaProvisioning/SnaProvisioningV1_0 HTTP/1.1 Host: localhost:8080 Content-Type: text/xml; charset=utf-8 Content-Length: 311 Accept: application/soap+xml, application/dime, multipart/related, text/* User-Agent: IBM Web Services Explorer Cache-Control: no-cache Pragma: no-cache SOAPAction: "" Authorization: Basic Z2VybWFuOmdlcm1hbg== Connection: close <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://ngin.ericsson.com/sna/types/v1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body> <q0:listServiceScripts/> </soapenv:Body> </soapenv:Envelope>
如何使用Java代码在此“授权”标头中传递用户名和密码?是散列还是类似的东西?什么是算法?
没有涉及安全性,我有一个工作的独立Java客户端:
SnaProvisioning myPort = new SnaProvisioning_Service().getSnaProvisioningV10Port(); myPort.listServiceScripts();
事实证明,有一种简单的标准方法可以实现我想要的目标:
import java.net.Authenticator; import java.net.PasswordAuthentication; Authenticator myAuth = new Authenticator() { @Override protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("german", "german".toCharArray()); } }; Authenticator.setDefault(myAuth);
没有自定义的“ sun”类或外部依赖项,也没有手动编码任何内容。
我知道BASIC安全性不是很好,但是我们也使用HTTPS。