Liferay:一旦用户输入有效凭证,如何显示已配置的页面

时间:2013-02-25 05:17:24

标签: liferay-6

我正在使用Liferay 6.1版本。

用户输入http:localhost后,我正在显示名为“/ ravi”的网页,其中包含我的自定义门户网站,如图所示

我在portal-ext.properties下配置了以下属性,如图所示

auth.forward.by.last.path=true
default.landing.page.path=/web/guest/ravi

请参阅用户输入http:localhost

时显示的自定义Portlet的屏幕截图

enter image description here

现在我的要求是,如果他输入有效的crendentails,我需要显示另一个页面(“/ web / guest / test”)。

在我的processAction类中,我这样做

public class ValidateUser extends MVCPortlet {
    public void processAction(ActionRequest request, ActionResponse response) {

        String userName = (String) request.getParameter("userName");
                String password = (String) request.getParameter("password");
        try {
//  Contatcs DB and validates the credentials here 
// Please let me know how can i show the Configured Page if his credentials are valid ??
        } 
               catch (Exception e) {
        }

    }


}

已编辑的部分

非常感谢您对默认login.events.post。

的回答

我是Liferay的新手,所以我可能在这里犯了一个错误,所以如果我做错了什么,请帮助我。

我按照以下步骤操作:

  1. 创建了一个名为“MyLogon”Portlet的新Portlet,并在其view.jsp中创建了一个包含两个文本字段(Login和Password)和一个提交按钮的表单。 单击该提交按钮,我实际上正在调用我的processAction方法并进行数据库调用以从mysql db验证用户。
  2. 2.然后我在/ web / guest / ravi中创建了一个页面,并将此“MyLogon”Portlet添加到这个新页面/ web / guest / ravi

    1. 然后在portal-ext.properties

      下配置了以下属性

      auth.forward.by.last.path =真 default.landing.page.path = /网络/客体/拉维

    2. 这就是我所做的。

      当输入http:localhost:8080时,它会显示taht page。

      如果我做错了,请告诉我

      编辑第二部分

      我已理解你答案的某些部分,我有这些问题。 你能帮忙吗

      我需要根据DataBase中的数据来验证用户,所以为此,我需要做以下几点。

      1. 我需要创建一个Hook来覆盖这个属性

        login.events.pre = com.LoginAction

        公共类LoginAction扩展了Action {

        public void run(HttpServletRequest req, HttpServletResponse res) {
        

        //在这里,我需要进行数据库调用以验证用户凭据,然后将其重定向到我想要的页面?

        }
        

        }

1 个答案:

答案 0 :(得分:1)

您需要创建Hook并覆盖默认的login.events.post

以下代码供您参考,

public class LandingPageAction extends Action {
    public LandingPageAction()
        {

        }
 public void run(HttpServletRequest request, HttpServletResponse response) throws ActionException
  {
      try
      {
          doRun(request, response);
      }
      catch(Exception e)
      {
          throw new ActionException(e);
      }
  }

protected void doRun(HttpServletRequest request, HttpServletResponse response) throws Exception
  {
String homeRedirect="/web/guest/test";
LastPath lastPath = new LastPath(StringPool.BLANK, homeRedirect); 
session.setAttribute("LAST_PATH", lastPath);
  }
}

这里有一些我不明白的事情。您正在访问localhost:8080,但是屏幕截图显示您已经登录(有一个SignOut链接并且用户Ravi Kiran已经登录),但仍然显示了一个登录页面。

当您 loggedin 用户时,

default.landing.page.path会出现。你打的是localhost:8080还是localhost / web / guest / Ravi?您尚未登录,因此不应重定向到/ web / guest / Ravi。

您可以在Liferay中重复使用默认的身份验证代码。不确定为什么要从请求参数中获取用户凭据并自行调用DB。

根据问题中的更新进行编辑

1. Liferay的默认登录页面(您刚刚下载并点击localhost时看到的那个:8080来自此路径 ..\default\deploy\ROOT.war\html\portlet\login。 此路径中有一个login.jsp,您可以编辑并提供自己的外观。 您可以在此login.jsp页面中找到以下条目 <portlet:param name="struts_action" value="/login/login" />

这在../ deploy / ROOT.war / WEB-INF / struts-config.xml中有相应的条目

<action path="/login/login" type="com.liferay.portlet.login.action.LoginAction">
    <forward name="portlet.login.login" path="portlet.login.login" />
</action>

您可以打开源代码并查看com.liferay.portlet.login.action.LoginAction方法。 这会根据您的passwords.encryption.algorithm=passwords.digest.encoding=执行基本身份验证 portal-ext.properties文件中的配置。 LoginAction将执行基本身份验证,并将重定向所有身份验证 用户按照default.landing.page.path=中提到的路径 如果你想(某些)用户重定向到(某些)其他路径(有条件地),你可以通过编写一个Hook来使用我上面提到的代码。

2.经过身份验证后,您可以登录并创建一个Page(在您的情况下为“ravi”)。您可以将自定义Portlet添加到此页面。您不应该编写一个cutom portlet,它将在您已经登录后进行身份验证