Liferay的autologin hook似乎没有注销当前用户。所以我尝试使用以下方法调用以编程方式执行此操作:
request.getSession().invalidate();
但没有成功。任何人都有与自动登录挂钩相同的问题吗?
答案 0 :(得分:0)
您要注销,您必须使Cookie无效,然后使会话无效,请参阅Liferay LogoutAction了解更多详情
答案 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());
}