【发布时间】:2011-09-15 10:31:31
【问题描述】:
我编写了以下代码来实现一个 Java Web 服务,该服务与同一主机上用另一种语言编写的应用程序进行通信:
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(name = "MyWebService")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class MyWebService {
@WebMethod(operationName = "methodName", action = "urn:#methodName")
@WebResult(name = "result", partName = "output")
public String methodName(@WebParam(name = "param1", partName = "input") String param1,
@WebParam(name = "param2", partName = "input") String param2){
// ...do something
return "You called this service with params: " + param1 + "," + param2;
}
由于要求不使用应用程序服务器来公开 Web 服务,因此我从另一个类实例化了该服务,如下所示:
Endpoint endpoint = Endpoint.create(new MyWebService());
URL url = new URL("http://localhost:7777/MyWebService");
endpoint.publish(url.toString());
问题:
1) 考虑到该项目的架构,使用用户名和密码保护该服务的最简单方法是什么? 任何代码示例将不胜感激。
2) 我做了一些研究,发现了 SOAPHandler 的用法,我认为它对我有用。 在使用 SOAPHandler 类的情况下,如何在消息中添加标头以要求客户端进行身份验证?
提前谢谢你
非常感谢您的回复,这也是我所遵循的方向,但是
例如,当我检查任何标题时:
SOAPHeader header = soapContext.getMessage().getSOAPPart().getEnvelope().getHeader();
Iterator<SOAPElement> iterator = header.getAllAttributes();
我得到一个空指针异常...有什么想法吗?
【问题讨论】:
-
如果这真的在 localhost 上运行,我会(硬编码)服务器只接受来自 localhost 的连接和/或将网络配置为不允许世界其他地方与此端口通信。
-
我不能这样做,因为架构不取决于我,而且这两个应用程序可能有一天会以最快的方式重新定位