在Liferay中强制注销后显示自定义错误页面

时间:2016-11-02 06:24:47

标签: liferay hook liferay-6 logout custom-error-pages

我们有一个要求,如果满足某些条件,我需要强制注销用户。我写了一个PostLoginAction钩子来检查条件并在条件满足时执行getSession().invalidate()。但在此之后,由于没有活动会话,Liferay默认带我登录屏幕(使用过滤器)。如果我尝试重定向到/ROOT/html/common/中的一个错误页面,我会收到一个神秘的内部服务器错误页面。

此时,我需要显示错误消息,但所有重定向都在登录页面上结束。这样做的正确方法应该是什么?

请注意,是否有办法在登录页面上显示错误消息而不是重定向到其他页面?我尝试使用sessionErrors.add()方法来实现同样的目标,但这也没有奏效。

如果您需要更多详细信息,请与我们联系。

1 个答案:

答案 0 :(得分:1)

请按照以下步骤实现此目的

  1. 创建帖子登录事件挂钩插件
  2. 使用给定的道具

    创建portal.properties
      

    login.events.post = com.liferay.sample.hook.LoginActionRedirect

  3. 在liferay-hook.xml中创建条目

    portal.properties

  4. 创建类LoginActionRedirect

    package com.liferay.sample.hook;
    
    import java.io.IOException;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.liferay.portal.kernel.events.Action;
    import com.liferay.portal.kernel.events.ActionException;
    
    public class LoginActionRedirect extends Action {
    
    @Override
    public void run(HttpServletRequest req, HttpServletResponse res)
            throws ActionException {
        System.out.println("Invalidating user");
        req.getSession().invalidate();
        try {
            //Use page URL to be redirected
            res.sendRedirect(req.getContextPath()+"/web/guest/WCM");
        } catch (IOException e) {
    
            System.out.println("Something went wrong while performing IO operations");
        }
    }
    

    }

  5. 将以下属性添加到portal-ext.properties文件中,以避免使用前置区域设置进行重定向

      

    locale.prepend.friendly.url.style = 0