Задействане на автоматично влизане в 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)


Ако приемем, че използвате Generic Portlet.

След всяко processAction методът doView се извиква преди изобразяването на 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