如果您尝试再次登录,那么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身份验证零件损失。

希望这可以帮助。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top