Портлеты Liferay и WSRP: неправильные URL-адреса для потребителя WSRP

В настоящее время я проверяю Liferay и его функцию портлетов, особенно удаленных портлетов через WSRP.

У меня есть два экземпляра LifeRay, работающие на разных машинах в одной сети. Теперь я хочу поделиться портлетом из одного экземпляра liferay с другим, поэтому я установил приложение WSRP на обеих установках и настроил один из узлов как WSRP Producer, а другой - как WSRP Consumer. Мой WSRP Producer публикует портлет для расчетов валют (Währungsrechner на немецком языке), который включен в Liferay. На первый взгляд кажется, что этот портлет WSRP работает на стороне потребителя WSRP - я могу добавить его на страницу потребителя WSRP, и его содержимое (некоторые поля ввода) отображается правильно.

Но есть одна проблема:

HTML-форма, отображаемая портлетом, всегда отправляется в домен производителя WSRP, а не в домен потребителя WSRP, как я ожидал. Атрибут действия тега содержит неверное имя домена.

Я также написал небольшой портлет для целей отладки с использованием пользовательского интерфейса Liferay, который просто печатает выходные данные JSP-тега, устанавливает его в WSRP-производителе и встраивает его на страницу потребителя WSRP. URL-адреса, напечатанные этим простым портлетом отладки, всегда являются абсолютными URL-адресами и указывают на производителя WSRP, даже если портлет отображается на получателе WSRP. Я ожидаю, что URL-адреса либо относительны, либо указывают на правильный домен, например на потребительский домен WSRP, когда портлет отображается через страницу в экземпляре liferay потребителя WSRP.

Причина моей оценки Liferay состоит в том, что мы хотим проверить, является ли это подходящим решением для разработки портлетов и предоставления этих портлетов через WSRP для удаленного использования. Для дальнейшего исследования проблемы я создал небольшой отладочный портлет с Liferay SDK и Eclipe Plugin. Портлет в основном состоит из простой страницы JSP, которая выводит результат:

    <% @ taglib uri = "http://liferay.com/tld/portlet" prefix = "liferay-portlet"%>
    портлет:actionURL: <портлет: actionURL /%>

Когда я устанавливаю этот портлет на lifery.mycompany.net и публикую его через производителя WSRP на liferay-2.mycompany.net, выходной URL-адрес будет следующим:

    http://liferay.mycompany.net:8080/de_DE/widget/web/wsrp-achimstestproducer/portlets?p_auth=0iLgJP7e&p_p_id=sbdebug_WAR_sbliferaydemopluginportlet_INSTANCE_qs2S&p_p_lifecycle=1&p_p_state=normal&p_p_mode=view

Обратите внимание, что доменом является liferay.mycompany.net вместо ожидаемого liferay-2.mycompany.net.

Как я могу это исправить? Нужно ли настраивать конфигурацию Liferay таким образом, чтобы потребитель WSRP заменял URL-адреса из портлетов WSRP своим собственным URL-адресом? Существуют ли другие факторы, влияющие на портлеты WSRP и action URL? Любая помощь по этому вопросу будет принята с благодарностью!

Моя установка: - Liferay 6.2 CE с Tomcat 7 - База данных MySQL 5.5 - Oracle Java 7 - Liferay был настроен с помощью встроенного мастера установки

Заранее спасибо!

2014-05-23: вот еще немного информации

Я также разместил этот вопрос с дополнительной информацией на форумах liferay:

-> установка для false-namespaced-parameters значения false в liferay-portlet.xml, похоже, решает проблему с доменом, но все же метод processAction портлета не выполняется, когда портлет используется через WSRP:(

Я что-то здесь не так делаю? Любые идеи и советы приветствуются!

1 ответ

Решение

После использования форума LifeRay, нескольких других ресурсов WSRP в Интернете, многие поисковые системы теперь работают.

Следующие три вещи, казалось, были основными причинами моих проблем с проблемами WSRP:

  • require-namespaced-parameters должно явно быть установлено в false
  • Маркер CSRF должен быть деактивирован, я сделал это в portlet-xml через init-param:

    <init-param>
      <name>check-auth-token</name>
      <value>false</value>
    </init-param>
    
  • Параметры рендеринга, по-видимому, недоступны в JSP представления, когда параметр рендеринга был создан в методе обработки событий, поэтому я переключился на атрибуты сеанса портлета для передачи данных из класса портлета в представление JSP.

Другие вопросы по тегам