Насколько помню, UserDetails создаётся только в случае с formLogin и basic, потому что информация о пользователях хранится на стороне нашего сервера, а не сервера авторизации
Читать полностью…Ты отправляешь мне ссылку на документацию, где ясно написано: many of authentication providers will create a UserDetails object as the principal, но many of, не значит все. Если ты посмотришь на то, что делают за тебя разные провайдеры аутентификации (например OAuth2LoginAuthenticationProvider и JwtAuthenticationProvider, разные провайдеры, но оба, как ни странно, работают с JWT) то узнаешь, что они создают разные токены (OAuth2AuthentciationToken и JwtAuthenticationToken соответственно). Каждый токен объект Authentication, но возвращает разные объекты при вызове метода getPrincipal (OidcUser и Jwt) и это не расширение интерфейса Principal. Общий интерфейс для них в приведённом случае ClaimAccessor. Именно поэтому в контракте метода и указан Object. Добавляя аннотацию AuthenticationPrincipal, Spring вероятно просто вызывает метод getPrincipal() у объекта аутентификации лежащего в SecurityContext и кастит ее к классу того параметра, который отмечен аннотацией. В моём случае, если указать UserDetails, будет вероятно просто ClassCastException. Ну и к слову сказать, разумеется я пробовал подставлять аннотацию AuthenticationPrincipal и очевидно это не работало. Проблема возникает именно в тестах, потому что при запуске всего контекста приложения все работает штатно и никаких ошибок нет. Поэтому я и пытаюсь узнать, какой компонент отвечает за инжект аутентификации внутрь метода контроллера
Читать полностью…ты юзаешь standalone builder, чтобы поднять контекст твоего контроллера
и похоже в этом контексте отсутсвует секьюрити контекст
Я конкретно только про Jwt говорил, как у тебя в примере.
Что касается тестового секьюрити контекста, лично я использовал @WithMockUser, либо для блэкбокс тестов свою фэктори для генерации тестовых JWT
Привет, возникло небольшое непонимание. Подскажите пожалуйста в реактивном программировании используется Netty и EventLoop с 1-2 потоками, а основная обработка бизнес логики идет на другом пуле потоков.
А в gRPC такая же модель или нет?