Liferay:自动登录后重定向更改密码

时间:2014-01-16 14:45:42

标签: liferay autologin

我想要一种功能,当我第一次创建用户时,我会在Liferay的用户创建邮件中为该用户提供自动登录URL。

在我的自动登录实现中,我检查了用户是否第一次登录。如果是第一次登录,则会自动对用户进行身份验证,如果不是,则会看到门户网站的登录页面。我成功地做到了这一点。

但现在我想要的是,一旦自动登录用户被重定向到门户网站的重置密码页面。在哪种情况下,这可以正确完成(在哪个事件中设置挂钩。)以及门户网站的重定向网址是什么?任何帮助,将不胜感激。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以直接在AutoLogin类中执行此操作:

public class MyAutoLogin implements AutoLogin {
    @Override
    public String[] login(HttpServletRequest request, HttpServletResponse response) throws AutoLoginException {
        ...
        if(userShouldBeRedirected){
            response.sendRedirect(redirectUrl);
        }
    }
    //UPDATE
    return credentials;
}

答案 1 :(得分:1)

更简单的解决方案呢?

在您向用户发送的第一封电子邮件中,告诉他们一旦他们第一次登录就可以获得这样的自动登录。

在Liferay端,有一个密码策略要求更改密码 - 或明确标记用户更改密码。

通过这种方式,Liferay完全负责用户帐户处理,您不会冒失去认证中的一些漏洞的风险(这是您不想陷入困境的一个领域),同时仍具有所有优势。

您可以实现自定义portlet并将其放在用户的个人页面或门户网站的任何其他页面上。

答案 2 :(得分:1)

最后,我开始工作了。

每当我在自动登录实现中发现用户的密码修改为null时,我只需要将Liferay用户的密码重置设置为true。 Liferay的 PortalRequestProcessor 有一个内部逻辑,如果它将用户的passwordReset标志视为true,则返回更新密码页面。

public class MyAutoLogin implements AutoLogin
{
    @Override
    public String[] login(HttpServletRequest request, HttpServletResponse response) throws AutoLoginException
    {
        //Get user details from auto Login request params

        if (null == user.getPasswordModifiedDate())
        {
            user.setPasswordReset(true);
            return credentials;
        }
        return null;
    }

}

通过在if条件中返回凭据,我确保仅为那些在Liferay上发布帐户后未更改密码的用户启用自动登录。