0

我正在使用 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 的屏幕截图

在此处输入图像描述

现在我的要求是,如果他输入有效的 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,并在其 view.jsp 中创建了一个带有两个文本字段(登录和密码)和一个提交按钮的表单。单击该提交按钮时,我实际上是在调用我的 processAction 方法并进行数据库调用以验证来自 mysql db 的用户。

2.然后我在 /web/guest/ravi 中创建了一个页面,并将这个“MyLogon”Portlet 添加到这个新页面 /web/guest/ravi

  1. 然后在下面的属性下配置这个portal-ext.properties

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

这就是我所做的。

并且在进入时http:localhost:8080,它显示了taht页面。

如果我做错了什么,请告诉我

编辑第二部分

我已经理解了你回答的一部分,我有这些问题。能否请你帮忙

我需要根据我的 DataBase 中存在的数据来验证用户,所以为此我需要执行以下操作。

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

    login.events.pre=com.LoginAction

    公共类 LoginAction 扩展 Action {

    public void run(HttpServletRequest req, HttpServletResponse res) {
    

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

    }
    

    }

4

1 回答 1

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 已经登录),但仍然显示了一个登录页面。

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

您可以在 Liferay 中重用默认的身份验证代码。不知道您为什么要从请求参数中获取用户凭据并让数据库自己调用。

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

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.propertiesLoginAction将执行基本身份验证并根据default.landing.page.path= 如果您希望(某些)用户重定向到(某些)其他路径(有条件地)中提到的路径重定向所有用户,您可以通过编写 Hook 来使用我上面提到的代码。

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

于 2013-02-25T06:51:40.893 回答