Как использовать веб-сервис, защищенный базовой аутентификацией HTTP, с помощью платформы CXF?
-
22-08-2019 - |
Вопрос
Я пытался заставить его работать, используя Руководство пользователя CXF, но мне не повезло.
Я пытаюсь вызвать веб-сервис, используя код Java.
Решение
Это описано в спецификации JAX-WS.По сути, установите имя пользователя/пароль в качестве свойств контекста запроса:
((BindingProvider)proxy).getRequestContext().put(
BindingProvider.USERNAME_PROPERTY, "joe");
((BindingProvider)proxy).getRequestContext().put(
BindingProvider.PASSWORD_PROPERTY, "pswd");
Среда выполнения помещает их в заголовок HTTP.
Другие советы
Вы можете предоставить свой собственный аутентификатор.Таким образом, это будет работать, если сам WDSL защищен базовой аутентификацией HTTP.
@WebServiceRef(wsdlLocation = "https://laka/sito?wsdl")
static XxxService service;
public static void main(String[] args) {
Authenticator.setDefault(new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("user", "password".toCharArray());
}
});
service = new XxxService();
Xxx port = service.getXxxPort();
// invoke webservice and print response
XxxResponse resp = port.foo();
System.out.println(resp.toString());
}
Есть гораздо лучший способ:
при создании Java из WSDL добавьте опцию «-exsh true»:
wsdl2java -exsh true -p edu.sharif.ce http://wsdl.ir/WebServices/WebService.asmx?WSDL
и добавьте UserCredential при использовании:
UserCredentials user = new UserCredentials();
user.setUserid("user");
user.setPassword("pass");
ResearchWebService_Service service = new ResearchWebService_Service();
ResearchWebService port = service.getResearchWebService();
port.addNewProject(newProject, user);
Не связан с StackOverflow