Как обработать перенаправление на Angular из authenticationSuccessHandler в Spring Security - PullRequest
0 голосов
/ 07 мая 2019

Я пытаюсь реализовать запомнить меня функциональность. Проблема в том, что Angular обрабатывает маршрутизацию по-своему, поэтому из Spring приложения я не могу перенаправить на конкретный путь к Angular App. Я решаю эту проблему, отправляя ответ с сообщением, куда перенаправить, а затем приложение Angular анализирует сообщение и перенаправляет на определенный путь. Он отлично работает, но при настройке безопасности он работает немного по-другому.

Например, когда я пытаюсь войти в систему, я перезаписываю successHandler, потому что по умолчанию Spring хочет перенаправить на некоторый URL-адрес, и он не может быть обработан Angular.

.and()
    .formLogin()
        .loginPage("/")
        .loginProcessingUrl("/login")
        .successHandler((request, response, authentication) -> {
            AuthenticatedUser user = new AuthenticatedUser(
                    authentication.getName(),
                    authentication.isAuthenticated()
            );
            log.info("Authenticated {}", user);
            response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
            response.getWriter().print(objectMapper.writeValueAsString(user));
        })
        .failureHandler((request, response, exception) -> {
            response.sendError(HttpServletResponse.SC_FORBIDDEN, "Wrong username and/or password");
        })

Это прекрасно работает, но когда дело доходит до RememberMe и authenticationSuccessHandler , оно работает по-другому. Код выглядит так же, как для успешного входа в систему.

.and()
    .rememberMe()
        .authenticationSuccessHandler((request, response, authentication) -> {
        AuthenticatedUser user = new AuthenticatedUser(
                    authentication.getName(),
                    authentication.isAuthenticated()
            );
            log.info("Authenticated {}", user);
            response.setContentType(MediaType.APPLICATION_JSON_UTF8_VALUE);
            response.getWriter().print(objectMapper.writeValueAsString(user));
            redirectStrategy.sendRedirect(request, response, "");
        }).key("test")

Но когда я делаю это таким образом, закрываю вкладку приложения и снова открываю ее, Spring предоставляет мне ответ json с моим AuthenticatedUser.

Response by Spring

Я также пытался использовать RedirectStrategy в authenticationSuccessHandler для перенаправления в index.html, root, но он тоже не работал.

redirectStrategy.sendRedirect(request, response, "index.html");
redirectStrategy.sendRedirect(request, response, "/");
redirectStrategy.sendRedirect(request, response, "");

В журналах приложений Spring я вижу, что мой RememberMe работает нормально, но Я не знаю, как правильно перенаправить , чтобы пользователю не нужно было снова входить в систему.

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