2016-02-14 2 views
2

Моя цель - вызвать веб-службу, для которой требуется аутентификация (когда я использую wsdl в браузере, браузер запрашивает у меня логин + пароль).Аутентификация клиента веб-службы Spring Boot

В качестве основы я использую образец из учебника this.

И теперь мне нужно добавить конфигурации аутентификации.

Согласование с documentation что-то вроде настройки WebServiceTemplate bean может помочь.

Но с Spring Boot нет приложения applicationContext.xml или любой другой конфигурации xml в проекте.

Итак, как настроить WebServiceTemplate с помощью Spring Boot или что еще можно решить такую ​​задачу?

+1

Вы всегда можете импортировать XML с '@ImportResource ("applicationContext.xml")' – varren

ответ

2

В Spring Boot вы можете настроить фасоль с помощью аннотации @Bean. Вы можете использовать классы конфигурации для разных компонентов. В этих классах вам нужна аннотация @Configuaration.

Этот tutorial описывает «вторую часть» учебника «Весна». Основные вещи при условии учебника: (на основе Spring учебника)

Проблема

SOAP-вебсервис потребляет требует базовой аутентификации HTTP, так что я нужен добавить заголовок аутентификации запроса ,

Без аутентификации

Прежде всего вы должны быть реализованы запрос без аутентификации как в учебнике по spring.io. Затем я буду изменить запрос http с заголовком аутентификации.

Получить запрос HTTP в обычае WebServiceMessageSender

Соединение сырой HTTP доступен в WeatherConfiguration класса. Там, в weatherClient, вы можете установить отправителя сообщения в WebServiceTemplate. Отправитель сообщения имеет доступ к необработанному соединению http . Итак, пришло время расширить HttpUrlConnectionMessageSender и написать собственную реализацию , которая добавит заголовок проверки подлинности в запрос. Мой заказ отправителем выглядит следующим образом:

public class WebServiceMessageSenderWithAuth extends HttpUrlConnectionMessageSender{ 

@Override 
protected void prepareConnection(HttpURLConnection connection) 
     throws IOException { 

    BASE64Encoder enc = new sun.misc.BASE64Encoder(); 
    String userpassword = "yourLogin:yourPassword"; 
    String encodedAuthorization = enc.encode(userpassword.getBytes()); 
    connection.setRequestProperty("Authorization", "Basic " + encodedAuthorization); 

    super.prepareConnection(connection); 
} 

@Bean 
public WeatherClient weatherClient(Jaxb2Marshaller marshaller){ 

WebServiceTemplate template = client.getWebServiceTemplate(); 
template.setMessageSender(new WebServiceMessageSenderWithAuth()); 

return client; 
} 
Смежные вопросы