Liferay - 自动登录钩子/ portlet没有注销当前用户

时间:2016-03-23 09:29:33

标签: liferay liferay-6

Liferay的autologin hook似乎没有注销当前用户。所以我尝试使用以下方法调用以编程方式执行此操作:

request.getSession().invalidate();

但没有成功。任何人都有与自动登录挂钩相同的问题吗?

3 个答案:

答案 0 :(得分:0)

您要注销,您必须使Cookie无效,然后使会话无效,请参阅Liferay LogoutAction了解更多详情

https://github.com/liferay/liferay-portal/blob/6.2.x/portal-impl/src/com/liferay/portal/action/LogoutAction.java

答案 1 :(得分:0)

主要问题是,如果用户已登录,则不会执行自动登录过滤器,因此您无法在其中执行任何注销操作。

对于我的解决方案,我创建了一个servlet过滤器,用于检查自动登录的一些参数并执行注销过程。要创建过滤器,请遵循以下指南:http://www.liferaysavvy.com/2016/02/liferay-servlet-filter-hooks.html

我在 doFilter 方法中注销的代码(在servlet过滤器中):

final HttpServletRequest httpServletRequest = (HttpServletRequest) request;
final HttpSession session = request.getSession(false);

if (session != null)
{
    session.invalidate();
}

filterChain.doFilter(request, response);

答案 2 :(得分:0)

在Liferay 7.2中,创建一个模块portlet并执行以下操作:

在导入后的顶部添加:

@Component(immediate = true, property = {"key=login.events.pre"}, service = LifecycleAction.class)

自定义您的班级,如下所示:

public class LoginPreAction implements LifecycleAction

添加:

lifecycleEvent.getRequest().getSession().invalidate();

这将使您的会话无效

现在发送重定向:

    try {
        lifecycleEvent.getResponse().sendRedirect("/c/portal/logout");
    } catch (IOException e) {
        System.out.println("IOException while redirecting::::  "+e.getStackTrace());            
    }