题
如果您尝试再次登录,那么Liferay不会记录当前登录的用户,实际上甚至可以保留当前已登录的用户登录的用户。因此,我试图强制注销。
我试过了:
request.getSession().invalidate();
但是,除了以某种方式打破登录功能外,这似乎不起作用。
我想知道是否有人有其他想法强制注销。
编辑:
try {
HttpSession session = request.getSession();
EventsProcessorUtil.process(PropsKeys.LOGOUT_EVENTS_PRE,
PropsUtil.getArray(PropsKeys.LOGOUT_EVENTS_PRE), request, response);
String domain = CookieKeys.getDomain(request);
Cookie companyIdCookie = new Cookie(CookieKeys.COMPANY_ID,
StringPool.BLANK);
if (Validator.isNotNull(domain)) {
companyIdCookie.setDomain(domain);
}
companyIdCookie.setMaxAge(0);
companyIdCookie.setPath(StringPool.SLASH);
Cookie idCookie = new Cookie(CookieKeys.ID, StringPool.BLANK);
if (Validator.isNotNull(domain)) {
idCookie.setDomain(domain);
}
idCookie.setMaxAge(0);
idCookie.setPath(StringPool.SLASH);
Cookie passwordCookie = new Cookie(CookieKeys.PASSWORD,
StringPool.BLANK);
if (Validator.isNotNull(domain)) {
passwordCookie.setDomain(domain);
}
passwordCookie.setMaxAge(0);
passwordCookie.setPath(StringPool.SLASH);
CookieKeys.addCookie(request, response, companyIdCookie);
CookieKeys.addCookie(request, response, idCookie);
CookieKeys.addCookie(request, response, passwordCookie);
try {
session.invalidate();
} catch (Exception e) {
}
EventsProcessorUtil.process(PropsKeys.LOGOUT_EVENTS_POST,
PropsUtil.getArray(PropsKeys.LOGOUT_EVENTS_POST), request, response);
} catch (Exception e) {
try {
PortalUtil.sendError(e, request, response);
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (ServletException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
根据我替换为更大的基础水平,在cookiekeys/processorserviceutil/...上提供NoclassDeffoundErrors。 (例如带有加工商的加工商服务,并从preccesorserviceutil复制功能代码)。
解决方案
1)session.invalidate()仅在通过应用程序服务器会话管理身份验证的情况下才能起作用,该验证不是;)
2)无论您是使用社区还是企业版,都应该有足够的源代码来实现您想要的任何东西
3)Portal-ext.Properties支持登录链以及前后钩子
4)登录名调用com.liferay.portal.action.logoutaction,其中包含一堆逻辑,但不会破坏结局,它应该给您足够的能力摇动其他Liferay身份验证零件损失。
希望这可以帮助。
不隶属于 StackOverflow