Удалить сеанс в весенней безопасности после исключения переадресации (ошибка аутентификации) - PullRequest
0 голосов
/ 12 апреля 2019

Я реализую поток кода авторизации Oauth2.В нем клиент отправляет запрос на сервер

http://localhost:8085/oauth/authorize?client_id=14366&redirect_uri=http://localhost:9999/ui/login&response_type=code&scope=read&

, поскольку пользователь не аутентифицирован, он будет перенаправлен на страницу входа.В процессе он создает сеанс, который я храню в Redis (включен через RedisHttpSessionConfiguration).

Также я настроил максимальное количество сеансов как 1

  http.sessionManagement()
        .maximumSessions(1)
        .maxSessionsPreventsLogin(true)

После того, как я успешно получил токен, используя этот поток.Я очищаю файлы cookie в браузере и снова вызываю запрос токена Oauth2.

  http://localhost:8085/oauth/authorize?client_id=14366&redirect_uri=http://localhost:9999/ui/login&response_type=code&scope=read&

. Это снова создает сеанс в redis перед перенаправлением на страницу входа.Теперь пользователь предоставляет свои учетные данные и отправляет, так как maxmimumsessions (1) достигнуто, это выдаст ошибку (Ошибка аутентификации с сервера), но сеанс в redis останется.Ниже приведено содержимое

sessionAttr:SPRING_SECURITY_SAVED_REQUEST : http://localhost:8085/oauth/authorize?client_id=14366&redirect_uri=http://localhost:9999/ui/login&response_type=code&scope=read&
maxInactiveTimeInterval
lastAccessedTime

Мой вопрос: как удалить этот сеанс?

Редактировать 1: У меня есть настроенный пользовательский autheniticationFailureHandler, как показано ниже, в котором я вызываю httpSession.invalidate ();но все же я вижу сессию в Redis.

 public AuthenticationFailureHandler getAuthenticationFailureHandler() {
    AuthenticationFailureHandler handler =
        new SimpleUrlAuthenticationFailureHandler("/login?error") {

          @Override
          public void onAuthenticationFailure(
              HttpServletRequest request,
              HttpServletResponse response,
              AuthenticationException exception)
              throws IOException, ServletException {
            request.getSession().invalidate();
            if (isUseForward()) {
              logger.debug("Forwarding to " + "/login?error");

              request.getRequestDispatcher("/login?error").forward(request, response);
            } else {
              logger.debug("Redirecting to " + "/login?error");
              getRedirectStrategy().sendRedirect(request, response, "/loginoauth?error");
            }
          }
        };

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