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

Liferay:自动登录后重定向以更改密码,liferay,autologin,Liferay,Autologin,我想要一个功能,当我第一次创建一个用户时,我会在Liferay中的用户创建邮件中为该用户提供一个自动登录url 在我的自动登录实现中,我检查了用户是否第一次拥有loggedin。如果是首次登录,则会自动对用户进行身份验证,如果不是,则会看到门户的登录页面。我已经成功地做到了这一点 但现在我想要的是,一旦自动登录,用户将被重定向到门户的重置密码页面。在哪种情况下可以正确执行此操作(在哪种情况下设置钩子)?门户的重定向url是什么?任何帮助都将不胜感激 提前谢谢 您可以直接在AutoLogin类中执

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

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

但现在我想要的是,一旦自动登录,用户将被重定向到门户的重置密码页面。在哪种情况下可以正确执行此操作(在哪种情况下设置钩子)?门户的重定向url是什么?任何帮助都将不胜感激


提前谢谢

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

公共类MyAutoLogin实现AutoLogin{
@凌驾
公共字符串[]登录(HttpServletRequest请求、HttpServletResponse响应)引发AutoLoginException{
...
如果(用户应被指示){
sendRedirect(重定向URL);
}
}
//更新
返回凭证;
}

一个更简单的解决方案怎么样

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

在Liferay方面,有一个要求更改密码的密码策略,或者显式标记用户以更改其密码

通过这种方式,Liferay完全负责用户帐户的处理,您不必冒着在身份验证中漏掉一些漏洞的风险(这是您不想陷入困境的一个领域),同时仍然拥有所有的好处


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

最后,我让它工作起来了

只要在自动登录实现中发现用户的密码修改日期为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上发布帐户创建后也未更改密码的用户启用自动登录。

但是如果在返回所需用户数据的字符串[]之前将用户重定向到更新密码url,门户不会对用户进行身份验证,并且会再次将我发送到门户的登录页面。不,应该可以。更改响应并返回凭据的原因。请参阅答案更新。您可以添加自己的PostLoginAction:从而扩展portal.properties的“login.events.post=”。但我的答案解决方案必须有效),但我们需要验证电子邮件。我们需要一个链接,而不是邮件中的密码,以便首次登录用户。如果您确实需要按照您描述的方式进行操作,我的解决方案并不适合您。如果你在寻找一个简单而不具侵入性的解决方案来解决潜在问题,你可能会对此有所了解。