Frage

Augenscheinlich liferay log nicht den aktuell angemeldeten Benutzers, wenn Sie versuchen, sich erneut anzumelden, und in der Tat hält auch die aktuell angemeldeten Benutzer angemeldet. Also ich versuche, eine Abmeldung zu erzwingen.

Ich habe versucht:

request.getSession().invalidate();

Aber das scheint nicht zu Arbeit neben irgendwie die Login-Funktionalität zu brechen.

Ich frage mich, ob jemand eine andere Idee hat, wie eine Abmeldung zu erzwingen.

Edit:

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();
            }
        }

Gibt noclassdeffounderrors auf cookiekeys / processorserviceutil / ... je nachdem, welche ich mit einer Basis-Ebene ersetzen. (Wie processorserviceutil mit einem processorserviceimpl und kopieren Sie den Funktionscode von proeccesorserviceutil).

War es hilfreich?

Lösung

1) session.invalidate () funktioniert nur, wenn die Authentifizierung durch die Anwendungsserver-Sitzung verwaltet wird, was es nicht ist;)

2), unabhängig davon, ob Sie Gemeinschaft oder Enterprise Edition, sollten Sie genug Quellcode zu erreichen, was Sie wollen

3) portal-ext.properties unterstützt Ketten anmelden sowie Pre- und Post-Login-Haken

4) Logout com.liferay.portal.action.LogoutAction Anrufe, die eine Reihe von Logik enthält, aber ohne die Endung zu verderben es sollten Sie genug geben die anderen Liferay Authentifizierungs-Teile zu schütteln verlieren.

Hope, das hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top