Срабатывание автологина в Liferay с перенаправления

У меня возникла проблема с запуском класса автологина в 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-адресом, например:

https://localhost:4444/path/to/public/page/a?p_p_id=58&p_p_lifecycle=0&_58_redirect=%2Fpath%2Fto%2Fprivate%2Fpage%2Fb

Я предполагаю, что я делаю здесь какую-то концептуальную ошибку, но по какой причине автологин не запускается во втором сценарии, позволяя переходить на частную страницу B?

Спасибо!


person pcesarperez    schedule 09.11.2015    source источник


Ответы (1)


Предположим, вы используете универсальный портлет.

После каждого вызова метода doView processAction перед рендерингом jsp-страницы. Так что относитесь к этому так. Перейдите на форум Liferay для получения более подробной информации.

public class MedelogGetAdmin extends GenericPortlet {

    String actionJsp = "";

    public void processAction(ActionRequest request, ActionResponse response) throws PortletException, IOException {

        //from variables      
        String formType = request.getParameter("formType");
        String buttonClicked = request.getParameter("button");

        //check what page to forward to
        actionJsp = Action.forwardTo(formType, buttonClicked); //jsp = consumers.jsp

        //forward to "/WEB-INF/jsp/"+jsp;
        //but how?


    }

    public void doView(RenderRequest request, RenderResponse response) throws PortletException, IOException {

        response.setContentType("text/html");

        if(actionJsp == null || actionJsp.equals("")){
            PortletRequestDispatcher dispatcher =
            getPortletContext().getRequestDispatcher("/WEB-INF/jsp/MedelogGetAdmin_view.jsp");       
            dispatcher.include(request, response);
        }else{
            PortletRequestDispatcher dispatcher =
            getPortletContext().getRequestDispatcher("/WEB-INF/jsp/"+actionJsp);       
            dispatcher.include(request, response);
        }

        //set the actionJsp back to default
        actionJsp = "";

    }

}
person Arjun Nayak    schedule 13.11.2015
comment
Извините за поздний ответ. Ваше решение сработало как шарм. Спасибо! - person pcesarperez; 19.11.2015
comment
Пожалуйста. Пожалуйста, проголосуйте, если вам понравился мой ответ. - person Arjun Nayak; 19.11.2015
comment
Извините, я забыл об этом :) Готово! - person pcesarperez; 20.11.2015