Весенний запрос безопасности.getUserPrincipal () всегда null
Действительно странная ситуация наблюдается в нашем приложении (Spring Boot 1.5.6 со всеми зависимостями BOM по умолчанию): вы можете прекрасно войти в систему (с AbstractPreAuthenticatedProcessingFilter), но это все равно оставляет Principal в запросе null! То есть request.getUserPrincipal() есть null, а SecurityContextHolder.getContext().getAuthentication() нет!
Principal (см. HealthMvcEndpoint.exposeHealthDetails (HttpServletRequest, Principal) ), который вводится ServletRequestMethodArgumentResolver, который в свою очередь берет его из запрос...
Похоже, я упустил что-то простое, но все еще не могу найти его : (
1 ответ:
Итак, после создания нового приложения Spring Boot и отладки его до конца, я обнаружил, что никто на самом деле не устанавливает
Principalв запрос. Это весна, которая оборачивает его в другой, который использует SpringSecurityContextдля вышеуказанных (и некоторых других методов). И это обертывание выполняется с помощьюSecurityContextHolderAwareRequestFilter, который существует по умолчанию (см.HttpSecurity.servletApi())...Но кто-то отключил конфигурацию безопасности Spring по умолчанию для нашего проекта, поэтому фильтра там не было!