Моя команда использует Auth0 для защиты всех наших сервисов Spring Boot. Он прекрасно работает в 99% случаев, однако одна из наших служб не работает с нулевым указателем при получении запросов.
Это происходит только во время наших сборок CI при использовании образа сборки Linux и выполнении тестов @SpringBootTest для сервиса. На компьютерах разработчиков все в порядке, в образе сборки Windows все в порядке.
Неисправный сервис идентичен во всех отношениях, которые я могу найти для всех других наших сервисов, так что для меня это загадка.
Код, который не работает, находится в BearerSecurityContextRepository в библиотеке безопасности Spring Auth0.
Код, о котором идет речь, это бит:
SecurityContext context = SecurityContextHolder.createEmptyContext();
String token = tokenFromRequest(requestResponseHolder.getRequest());
Authentication authentication = PreAuthenticatedAuthenticationJsonWebToken.usingToken(token);
if (authentication != null) {
context.setAuthentication(authentication);
logger.debug("Found bearer token in request. Saving it in SecurityContext");
}
Объект контекста в строке 5 возвращается нулевым и взрывается. Я посмотрел на каждую возможную реализацию SecurityContextHolderStrategy, которую SecurityContextHolder мог бы использовать, которая находится на пути к классам, и я не вижу ни одного сценария, где этот вызов createEmptyContext () вернулся бы нулевым. Кажется, что каждая реализация просто возвращает новый SecurityContextImpl.
Мне кажется, что это должно быть что-то в среде этого образа сборки Linux, которое вызывает проблему (более поздние части нашей сборки требуют, чтобы мы использовали Linux, или я просто переключился бы на образ Windows).
Я надеюсь, что кто-то, кто действительно хорошо знает внутренности весенней безопасности, мог бы дать мне несколько советов относительно того, что может быть причиной проблемы, чтобы я мог глубже вникнуть в изображение. Или, если я с базы, и это что-то еще, указатель на то, что спасет.
Спасибо!