Liferay DXP:processLifecycleEvent重定向不起作用

时间:2018-07-11 18:53:05

标签: authentication liferay osgi liferay-7

我在Liferay DXP中有一个自定义的登录后事件类。我正在尝试通过重定向到外部(非Liferay)错误页面来处理异常。

我所拥有的代码未重定向。

我尝试使用lifecycleEvent.getResponse().sendRedirect(redirectURL);request.setAttribute(AutoLogin.AUTO_LOGIN_REDIRECT, redirectURL);进行重定向。这两个都不在下面的此类中起作用。

我不确定登录后生命周期操作是否具有使request.setattribute工作的其他命令,或者因为已经提交响应而lifecycleEvent.getResponse()工作太晚了。

日志中没有错误或其他错误。登录后,无论登录后是否有例外,都仅将用户定向到Liferay默认登录页面。

是否有人试图在Liferay DXP中使用这种类型的错误处理? 非常感谢任何见解。我的工作期限非常紧迫。

我的下面的代码:

  

@Component(       立即=真,       属性= {           “ key = login.events.post”       },       服务= LifecycleAction.class     )

     

公共类CustomPostLoginFilter实现LifecycleAction {

@Override
public void processLifecycleEvent(LifecycleEvent lifecycleEvent) throws ActionException {

    final HttpSession session = lifecycleEvent.getRequest().getSession();
    HttpServletRequest request = lifecycleEvent.getRequest();

    String redirectURL = loginKeys.defaultErrorRedirectURL; 

    try {   
        // custom code
    } catch(PortalException e) {
        _log.error("Error in post login filter portal exception "  + redirectURL, e);
        request.setAttribute(AutoLogin.AUTO_LOGIN_REDIRECT, redirectURL);
    } catch (Exception e) {
        _log.error("Error in post login filter exception "  + redirectURL, e);      

        try {
            _log.info("Trying to post login filter redirect ");     
            if (Validator.isNotNull(redirectURL)) {
                _log.info("redirect url not null ");    
                lifecycleEvent.getResponse().sendRedirect(redirectURL);
            }
            else {
                _log.info("redirect url null"); 
            }
        } catch (Exception e1) {
            _log.error("Error in post login filter redirect ", e1);     

        }
        // does not seem to redirect on post login
        //request.setAttribute(AutoLogin.AUTO_LOGIN_REDIRECT, redirectURL);
    } 
}

}

谢谢!

1 个答案:

答案 0 :(得分:2)

登录到某个目标网页后,我们还会执行自定义重定向,但请在此处使用LAST_PATH会话属性:

@Override
public void processLifecycleEvent(LifecycleEvent lifecycleEvent) throws ActionException {
    HttpSession ses = lifecycleEvent.getRequest().getSession();
    LastPath lastPath = new LastPath("/group/your-landing-page", "", "");
    ses.setAttribute(WebKeys.LAST_PATH, lastPath);
}

此代码段适用于我们的DXP环境。