liferay: как сначала принудительно выйти из системы в аутологине? - PullRequest
4 голосов
/ 17 декабря 2010

Очевидно, что liferay не регистрирует текущего пользователя, вошедшего в систему, если вы попытаетесь войти снова, и фактически даже сохраняет зарегистрированного пользователя, вошедшего в систему, в систему. Поэтому я пытаюсь принудительно выйти из системы.

Iпопробовал:

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

Вызывает ошибки noclassdeffounder на cookiekeys / processorserviceutil / ... в зависимости от того, что я заменяю на более базовый уровень.(например, процессор-сервис или утилита с процессором-сервисом и скопировать код функции из proeccesorserviceutil).

1 Ответ

0 голосов
/ 20 декабря 2010

1) session.invalidate () работает, только если аутентификация управляется сессией сервера приложений, а это не так;)

2) независимо от того, используете ли вы Community или Enterprise edition, у вас должно быть достаточно исходного кода для достижения того, что вы хотите

3) portal-ext.properties поддерживает цепочки входа в систему, а также хуки до и после входа в систему

4) Выйти из системы вызывает com.liferay.portal.action.LogoutAction, которая содержит множество логики, но без порчи концовки должна дать вам достаточно, чтобы встряхнуть другие части аутентификации Liferay.

Надеюсь, это поможет.

...