Обработка исключений и SpringSecurity
Kotlin.
Настройка SecurityFilterChain
:
@Bean
fun filterChain(http: HttpSecurity): SecurityFilterChain {
http {
authorizeRequests {
authorize(HttpMethod.GET,"/error", permitAll)
authorize("/login", permitAll)
authorize("/registration", permitAll)
authorize(anyRequest, authenticated)
}
formLogin {
loginPage = "/login"
}
}
return http.build()
}
Ввожу логин/пароль на formLogin
, POST запрос обрабатывает Spring Security. Если всё отработало штатно и, например, такого пользователя нет, то SS бросает UsernameNotFoundException
и редиректит (по умолчанию) на URL /login?error. Но если в процессе аутентификации я создаю собственное исключение (например, в UserDetailService
), то SS оборачивает его через систему try/catch
в свою ошибку InternalAuthenticationServiceException
и опять же редиректит на URL /login?error. Я не могу обработать ни то, ни другое исключение в @ControllerAdvice
через @ExceptionHandler
(не отлавливает, ошибка не в контроллерах, а в фильтрах SS).
Что хотелось бы:
когда я создаю собственное исключение во время работы фильтров SS, обрабатывать его и выдавать пользователю ModelAndView
(View
/error и Model
с параметрами), как я могу делать это через @ExceptionHandler
.