Spring Boot / Security - Custom 404 страница - PullRequest
0 голосов
/ 31 января 2019

Я создал пользовательскую страницу ошибки 404 в своем приложении Spring Boot, я также использую Spring Security и у меня есть точка входа для аутентификации с несколькими авторизованными URL-адресами (страница ошибки включена в этот список).

Я обнаружил, что если я ввожу несуществующий URL-адрес, точка входа для проверки подлинности перехватывает запрос, поскольку он не является авторизованным URL-адресом, и я снова оказываюсь на странице входа в систему вместо пользовательской страницы ошибки 404.Любые идеи?

Базовый пример того, что я имею в конфигурации безопасности

http
    .csrf().disable()
        .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/login"))
    .and()
        .authorizeRequests().antMatchers("/login", "/error-404")

1 Ответ

0 голосов
/ 31 января 2019

Вот что Spring Security сделает при вызове /invalid-url

Если /invalid-url является безопасным (по умолчанию)

  1. Сохранить запрос (/invalid-url -> session)
  2. Вызов точки входа для аутентификации
  3. Перенаправление на / login
  4. Пользователь будет аутентифицировать
  5. После успешной аутентификации перенаправить на сохраненный запрос /invalid-url
  6. Страница не найдена - перенаправить на обработчик ошибок

Если /invalid-url небезопасна

  1. Страница не найдена - перенаправитьк обработчику ошибок

Таким образом, вам нужно объявить все ваши незащищенные URL, если вы хотите второй поток, перейдите непосредственно на страницу 404

.mvcMatchers("/login", "/error-404/**", "/invalid-url/**").permitAll()

Очевидно, что делать это:

.anyRequests().permitAll()

, поскольку последнее утверждение решит ваш вариант использования, это также опасно.Затем вы явно отображаете любую конечную точку, которая должна быть защищена.И если вы забудете об этом, эта конечная точка останется открытой.

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