我想要一种功能,当我第一次创建用户时,我会在Liferay的用户创建邮件中为该用户提供自动登录URL。
在我的自动登录实现中,我检查了用户是否第一次登录。如果是第一次登录,则会自动对用户进行身份验证,如果不是,则会看到门户网站的登录页面。我成功地做到了这一点。
但现在我想要的是,一旦自动登录用户被重定向到门户网站的重置密码页面。在哪种情况下,这可以正确完成(在哪个事件中设置挂钩。)以及门户网站的重定向网址是什么?任何帮助,将不胜感激。
提前致谢。
答案 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上发布帐户后未更改密码的用户启用自动登录。