Как справиться с неудачным выходом из системы весной? - PullRequest
0 голосов
/ 17 апреля 2019

В Spring Security я не отменяю сессию немедленно, но делаю это в LogoutSuccessHandler (необходимо сохранить некоторую информацию для опроса после выхода из системы) Это подводит меня к сути: как я могу лишить законной силы сеанс, если выход из системы происходит неправильно?

HttpSecurity:

        http.authorizeRequests()
                ...
                .logout()
                .logoutUrl("/logout")
                .logoutSuccessHandler(myLogoutSuccessHandler())
                .invalidateHttpSession(false) // session invalidated by logoutSuccessHandler.

И myLogutSuccessHandler ():

public class MyLogoutSuccessHandler extends SimpleUrlLogoutSuccessHandler implements LogoutSuccessHandler {

    @Override
    public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
            throws IOException, ServletException {

        ....

        // Invalidation of an old session
        HttpSession session = request.getSession(false);
        if (session != null) {
            logger.debug("Invalidating session: " + session.getId());
            session.invalidate();
        }

        ...

        super.onLogoutSuccess(request, response, authentication);
    }
}

Это подводит меня к сути: как мне сделать недействительным сеанс, если выход из системы идет не так?

Спасибо

1 Ответ

1 голос
/ 17 апреля 2019

Из Javadoc:

Реализации LogoutHandler ожидают вызова для выполнения необходимой очистки, поэтому не должны выдавать исключения.

Так что ваш LogoutSuccessHandler всегда будет вызываться. До тех пор, пока в вашем методе onLogoutSuccess(..) не возникнет исключений до того, как вы фактически аннулируете сеанс (или пока он перехвачен), ваш код всегда будет выполняться.

Возможно, название метода onLogoutSuccess() не очень интуитивно понятно (возможно, больше похоже на afterLogout()). Нет LogoutFailureHandler, потому что выход из системы всегда будет успешным, и поэтому LogoutSuccessHandler onLogoutSuccess() всегда будет вызываться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...