У меня возникла проблема с запуском класса автологина в Liferay CE 6.1.1 при выполнении перенаправления из метода настраиваемого действия. Позвольте мне объяснить сценарии.
Функциональный сценарий 1: прямое POST
действие
Допустим, у меня есть общедоступная страница A с формой входа (с именем пользователя и паролем), классом автоматического входа для выполнения некоторых проверок и частной страницей B для отображения некоторых данных после надлежащей аутентификации.
У меня есть JSP с формой входа в портлет, развернутый на общедоступной странице A, следующим образом (это упрощенная версия):
<form method="post" action="https://localhost:4444/path/to/private/page/b">
<input id="username" type="text" />
<input id="password" type="password" />
<input type="submit" />
</form>
При нажатии кнопки отправки запускается класс автологина, и, если проверки пройдены, пользователь попадает на приватную страницу B, как и предполагалось.
Нефункциональный сценарий №2: перенаправление через пользовательское действие
Предыдущий сценарий не работает в определенных ситуациях, когда была выполнена предыдущая аутентификация, поэтому мне нужно добавить некоторые проверки перед выполнением автоматического входа.
Я подумал, что создание пользовательского действия, связанного с формой, было хорошей идеей, поэтому я переписал форму следующим образом:
<portlet:actionUrl name="actionLogin" var="urlActionLogin" />
<form method="post" action="${urlActionLogin}">
<input id="username" type="text" />
<input id="password" type="password" />
<input type="submit" />
</form>
В основном классе портлета, развернутого на общедоступной странице A, нам нужен метод для обработки действия формы (опять же упрощая):
public void actionLogin (ActionRequest request, ActionResponse response) {
if (testsArePassed ( )) {
response.sendRedirect ("https://localhost:4444/path/to/private/page/b");
} else {
// Error page.
}
}
Если оставить в стороне передачу параметров (я использовал copy-request-parameters
в portlet.xml
, чтобы гарантировать это), все, что я получаю, — это снова та же общедоступная страница A, без автоматического входа и с URL-адресом, например:
Я предполагаю, что я делаю здесь какую-то концептуальную ошибку, но по какой причине автологин не запускается во втором сценарии, позволяя переходить на частную страницу B?
Спасибо!