Весенний запрос безопасности.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 по умолчанию для нашего проекта, поэтому фильтра там не было!