我正在使用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的新手,所以我可能在这里犯了一个错误,所以如果我做错了什么,请帮助我。
我按照以下步骤操作:
2.然后我在/ web / guest / ravi中创建了一个页面,并将此“MyLogon”Portlet添加到这个新页面/ web / guest / ravi
然后在portal-ext.properties
auth.forward.by.last.path =真 default.landing.page.path = /网络/客体/拉维
这就是我所做的。
当输入http:localhost:8080
时,它会显示taht page。
如果我做错了,请告诉我
编辑第二部分
我已理解你答案的某些部分,我有这些问题。 你能帮忙吗
我需要根据DataBase中的数据来验证用户,所以为此,我需要做以下几点。
我需要创建一个Hook来覆盖这个属性
login.events.pre = com.LoginAction
公共类LoginAction扩展了Action {
public void run(HttpServletRequest req, HttpServletResponse res) {
//在这里,我需要进行数据库调用以验证用户凭据,然后将其重定向到我想要的页面?
}
}
答案 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,它将在您已经登录后进行身份验证