Domanda

Apparantely Liferay non registra l'utente attualmente connesso se si tenta di accedere di nuovo, e in realtà anche mantiene attualmente connesso utente connesso. Così sto cercando di forzare un logout.

ho provato:

request.getSession().invalidate();

Ma questo non sembra funzionare oltre in qualche modo rompere la funzionalità di login.

Mi chiedevo se qualcuno ha qualche altra idea di come forzare un logout.

Modifica:

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

Dà noclassdeffounderrors su cookiekeys / processorserviceutil / ... a seconda di quale sostituisco con un livello più basso. (Come processorserviceutil con un processorserviceimpl e copiare il codice funzione da proeccesorserviceutil).

È stato utile?

Soluzione

1) session.invalidate () funziona solo se l'autenticazione è gestita dalla sessione server di applicazioni, che non lo è;)

2), indipendentemente dal fatto che si utilizzi Community Edition o Enterprise, si dovrebbe avere il codice sorgente sufficiente per ottenere quello che volete

3) portal-ext.properties supporti login catene così come pre-e post-login ganci

4) Esci chiama com.liferay.portal.action.LogoutAction che contiene un po 'di logica, ma senza rovinare il finale dovrebbe dare sufficiente per scuotere le altre parti di autenticazione Liferay perdono.

Spero che questo aiuti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top