使用javax.jws保护java嵌入式web服务,而不使用应用程序服务器
我编写了以下代码来实现Java web服务,该服务与同一主机上用另一种语言编写的应用程序进行通信:使用javax.jws保护java嵌入式web服务,而不使用应用程序服务器,java,service,web,Java,Service,Web,我编写了以下代码来实现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(par
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();
SOAPHeader header=soapContext.getMessage().getSOAPPart().getEnvelope().getHeader();
迭代器迭代器=header.getAllAttributes();
我得到一个空指针异常…有什么想法吗?我做了一个工作程序。为了补充您已经发现的内容,下面是一种使用处理程序的方法
Endpoint endpoint = Endpoint.create(new MyWebService());
Binding binding = endpoint.getBinding();
List<Handler> handlerChain = new ArrayList<Handler>(1);
handlerChain.add(new MyHandler());
binding.setHandlerChain(handlerChain);
URL url = new URL("http://localhost:7777/MyWebService");
endpoint.publish(url.toString());
从客户端来看,如果您的客户端使用JAB-WS,则必须使用客户端处理程序。下面是一个典型的JAX-WS客户端调用示例
Dispatch<Source> dispatch = … create a Dispatch<Source>
dispatch.getBinding().setHandlerChain(chain)
Source request = … create a Source object
Source response = dispatch.invoke(request);
Dispatch Dispatch=…创建调度
dispatch.getBinding().setHandlerChain(chain)
源请求=…创建源对象
源响应=dispatch.invoke(请求);
在这里,链中的处理程序将向传出请求添加头。仅为发出的消息配置此功能。我执行了一个工作程序。为了补充您已经发现的内容,下面是一种使用处理程序的方法
Endpoint endpoint = Endpoint.create(new MyWebService());
Binding binding = endpoint.getBinding();
List<Handler> handlerChain = new ArrayList<Handler>(1);
handlerChain.add(new MyHandler());
binding.setHandlerChain(handlerChain);
URL url = new URL("http://localhost:7777/MyWebService");
endpoint.publish(url.toString());
从客户端来看,如果您的客户端使用JAB-WS,则必须使用客户端处理程序。下面是一个典型的JAX-WS客户端调用示例
Dispatch<Source> dispatch = … create a Dispatch<Source>
dispatch.getBinding().setHandlerChain(chain)
Source request = … create a Source object
Source response = dispatch.invoke(request);
Dispatch Dispatch=…创建调度
dispatch.getBinding().setHandlerChain(chain)
源请求=…创建源对象
源响应=dispatch.invoke(请求);
在这里,链中的处理程序将向传出请求添加头。仅为发出的消息配置此选项。您所做的已经足够公平。
关于身份验证,您可以公开一种将用户名和密码作为登录凭据传递的方法。
一旦用户提供了正确的凭据,用户就已经过身份验证。
注意:现在您必须维护会话数据,并确保传入的请求来自经过身份验证的用户。
端点
只是在内部部署了一个轻量级http服务器。您必须设计web服务实现以保持请求之间的“状态”
你还有两个选择
端点
不会部署
WSDL
。因此,您必须准确地与连接的客户端进行通信,
您期望的SOAP
头。不过,也可以通过以下方式编写WSDL
您自己并将其“附加”到端点
端点很容易
你所做的很公平。
关于身份验证,您可以公开一种将用户名和密码作为登录凭据传递的方法。
一旦用户提供了正确的凭据,用户就已经过身份验证。
注意:现在您必须维护会话数据,并确保传入的请求来自经过身份验证的用户。
端点
只是在内部部署了一个轻量级http服务器。您必须设计web服务实现以保持请求之间的“状态”
你还有两个选择
端点
不会部署
WSDL
。因此,您必须准确地与连接的客户端进行通信,
您期望的SOAP
头。不过,也可以通过以下方式编写WSDL
您自己并将其“附加”到端点
端点很容易
如果这真的在本地主机上运行,我会(硬代码)服务器只接受来自本地主机的连接和/或将网络配置为不允许世界其他地区与此端口通信。我不能这样做,因为体系结构不由我决定,两个应用程序可能会在一天内以最快的方式重新定位。如果这真的在本地主机上运行,我会(硬代码)服务器只接受来自本地主机的连接和/或将网络配置为不允许世界其他地区与此端口通信。我不能这样做,因为体系结构不由我决定,两个应用程序可能会在一天内以最快的方式重新定位