Я написал следующий код для реализации веб-службы Java, которая взаимодействует с приложением, написанным на другом языке на том же хосте:
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;
}
Поскольку требования не заключаются в использовании сервера приложений для предоставления веб-службы, я создал экземпляр службы из другого класса следующим образом:
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();
Я получаю исключение нулевого указателя ... есть идеи?