我在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);
}
}
}
谢谢!
答案 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环境。