Я использую HTTP-компонент mule для подключения к REST API, который имеет базовую аутентификацию с USERNAME и PASSWORD. Я использовал вкладку «Настройки HTTP» компонента HTTP, чтобы предоставить данные аутентификации, имя пользователя и пароль. но я думаю, что это не работает. Я делаю что-то не так? есть ли лучший способ вызвать службу REST, которая имеет обычную аутентификацию.
Использование службы REST с базовой аутентификацией от MULE
Ответы (3)
Вы должны установить значение базовой аутентификации в качестве свойства заголовка для исходящего сообщения Mule, когда вы используете службу REST через конечную точку исходящего трафика Mule HTTP.
<flow name="consume_rest">
.............
..........
<set-property propertyName="Authorization" value="Basic Authorization String combination of Username and password" />
<http:outbound-endpoint exchange-pattern="request-response" method="POST" responseTimeout="20000"
host="localhost" path="rest.path" port="Port number" />
.............
.............
</flow>
Надеюсь это поможет.
person
user1760178
schedule
24.12.2014
Ниже приведен пример службы REST с базовой аутентификацией:
<mule-ss:security-manager>
<mule-ss:delegate-security-provider name="memory-provider" delegate-ref="authenticationManager" />
</mule-ss:security-manager>
<spring:beans>
<ss:authentication-manager alias="authenticationManager">
<ss:authentication-provider>
<ss:user-service id="userService">
<ss:user name="your username" password="your password" authorities="ROLE_ADMIN" />
<ss:user name="your username2" password="your password2" authorities="ROLE_USER" />
</ss:user-service>
</ss:authentication-provider>
</ss:authentication-manager>
</spring:beans>
<flow name="MainService" doc:name="MainService">
<http:inbound-endpoint exchange-pattern="request-response" host="localhost" port="8082" doc:name="HTTP">
<mule-ss:http-security-filter realm="realm" />
<mule-ss:authorization-filter requiredAuthorities="ROLE_ADMIN"/> <!-- Restrict a particular group of users -->
</http:inbound-endpoint>
<jersey:resources doc:name="REST">
<component class="com.test.services.schema.maindata.v1.Impl.MainDataImpl"/>
</jersey:resources>
</flow>
А для подключения существующей внешней службы REST из Mule используйте: - http://username:password@host/yourpath
в исходящей конечной точке http
person
Anirban Sen Chowdhary
schedule
24.12.2014
Спасибо за повтор.
- person Naveen Rayappa; 24.12.2014
я сделал то же самое, что вы упомянули во фрагменте, и я использую тот же формат URL-адреса для использования службы от любого клиента, включая HTTP-мул. Однако я хотел бы использовать существующий HTTP-компонент MULE и параметр базовой аутентификации на вкладке «Дополнительно», чтобы в самом компоненте были указаны имя пользователя и пароль, и я буду использовать обычный URL-адрес, который не будет содержать данные аутентификации.
- person Naveen Rayappa; 24.12.2014
Это просто... В исходящей конечной точке http на вкладке "Настройки HTTP" вы найдете параметр имени пользователя и пароля... поэтому на вкладке "Дополнительно" вы просто указываете URL-адрес в разделе адреса, а затем на вкладке "Настройки HTTP" ставите имя пользователя и пароль... Итак, наконец, ваш xml будет выглядеть так: -
<https:outbound-endpoint address="you url" user="youruser" password="your password" exchange-pattern="request-response" method=""
и да, проверьте метод в исходящей конечной точке. Выберите GET или POST в соответствии с вашей службой REST.
- person Anirban Sen Chowdhary; 24.12.2014
Mule прекрасно работает с URL-адресом username:password@host/yourpath, который содержит учетные данные для аутентификации . Однако я пытался так же, как вы упомянули выше. Я имею в виду установку имени пользователя и пароля в соединителе Mule, но он выдает следующую ошибку. Зарегистрированная проверка подлинности установлена на org.mule.module.spring.security.filters.http.HttpBasicAuthenticationFilter но в сеансе не было контекста безопасности. Аутентификация запрещена на URL-адресе конечной точки Тип полезной нагрузки сообщения: String
- person Naveen Rayappa; 24.12.2014
Это странно... Это должно быть что-то вроде: -
<http:outbound-endpoint exchange-pattern="request-response" host="localhost" user="your username" password="your password" port="your port" path="yourpath" doc:name="HTTP" method="Your method"/>
.. Пожалуйста, проверьте метод... по умолчанию исходящий метод Http - POST.. Проверьте с помощью службы REST.. укажите метод, который ваш веб-служба использует POST/GET/PUT и т. д. лучше обновить свой вопрос с помощью XML-файла Mule. нам будет легко обнаружить проблему...
- person Anirban Sen Chowdhary; 24.12.2014
Хорошо .. Попробуйте следующее .. это сработает .. поместите хост , порт и путь вместо адреса следующим образом: -
<http:outbound-endpoint exchange-pattern="request-response" host="localhost" user="username" password="password" port="Your Port" path="your path" doc:name="HTTP" method="GET"/>
... Таким образом, вы можете поместить имя пользователя и пароль в конечную точку httpoutbound
- person Anirban Sen Chowdhary; 29.12.2014
Исходящий HTTP с базовой аутентификацией
Спасибо всем за ответ!! Имя пользователя и пароль на соединителе нужны, если вы хотите защитить входящую конечную точку с помощью базовой проверки подлинности HTTP.
При вызове внешних служб, защищенных базовой аутентификацией, вы должны использовать метод uri
person
Naveen Rayappa
schedule
29.12.2014