Весенний запрос безопасности.getUserPrincipal () всегда null


Действительно странная ситуация наблюдается в нашем приложении (Spring Boot 1.5.6 со всеми зависимостями BOM по умолчанию): вы можете прекрасно войти в систему (с AbstractPreAuthenticatedProcessingFilter), но это все равно оставляет Principal в запросе null! То есть request.getUserPrincipal() есть null, а SecurityContextHolder.getContext().getAuthentication() нет!

Это, в свою очередь, влияет на способность нашей конечной точки здоровья быть чувствительной: она использует Principal (см. HealthMvcEndpoint.exposeHealthDetails (HttpServletRequest, Principal) ), который вводится ServletRequestMethodArgumentResolver, который в свою очередь берет его из запрос...

Похоже, я упустил что-то простое, но все еще не могу найти его : (

1 3

1 ответ:

Итак, после создания нового приложения Spring Boot и отладки его до конца, я обнаружил, что никто на самом деле не устанавливает Principal в запрос. Это весна, которая оборачивает его в другой, который использует Spring SecurityContext для вышеуказанных (и некоторых других методов). И это обертывание выполняется с помощью SecurityContextHolderAwareRequestFilter, который существует по умолчанию (см. HttpSecurity.servletApi())...

Но кто-то отключил конфигурацию безопасности Spring по умолчанию для нашего проекта, поэтому фильтра там не было!