Я пытаюсь реализовать запомнить меня функциональность. Проблема в том, что 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.
Я также пытался использовать RedirectStrategy в authenticationSuccessHandler для перенаправления в index.html, root, но он тоже не работал.
redirectStrategy.sendRedirect(request, response, "index.html");
redirectStrategy.sendRedirect(request, response, "/");
redirectStrategy.sendRedirect(request, response, "");
В журналах приложений Spring я вижу, что мой RememberMe работает нормально, но Я не знаю, как правильно перенаправить , чтобы пользователю не нужно было снова входить в систему.