Защита сервисов отдыха с использованием базовых средств аутентификации Spring занимает много времени, чтобы дать ответ - PullRequest
0 голосов
/ 09 июня 2019

Demo application flow

Как упомянуто на картинке, у меня есть три демонстрационных приложения A, B, C, представляющих различные службы отдыха. Эти сервисы защищены базовой аутентификацией. Разные потребители могут использовать эти службы отдыха, пройдя базовую аутентификацию.

Настройка безопасности Spring выполняется с использованием подхода Spring XML и в памяти применяется аутентификация. BCryptPasswordEncoder был использован. Конфигурация не имеет состояния. Используемая версия среды Spring была 4.3.22.RELEASE, а используемая версия безопасности Spring была 4.2.11.RELEASE.

Поскольку защита служб отдыха с помощью базовой аутентификации требует определенных затрат. Ниже приведено время, необходимое различным демонстрационным приложениям для ответа до и после применения базовой аутентификации, когда я выполнял нагрузочное тестирование.

Приложение B - Количество потоков не превышает 15000.

До: - около 1 миллисекунды. После: - около 30 миллисекунд.

РЕЗУЛЬТАТ: - 30 миллисекунд - это приемлемая стоимость, которую можно считать хорошей.

Приложение C - Количество потоков не превышает 3000.

До: - около 28 миллисекунд. После: - около 61 миллисекунды.

РЕЗУЛЬТАТ: - 61 миллисекунда - приемлемая стоимость, которую можно считать хорошей.

Приложение A - Количество потоков не превышает 37000.

До: - около 300 миллисекунд. После: - около 13 секунд.

РЕЗУЛЬТАТ: - НЕ ПРИНИМАЕТСЯ. Время отклика увеличивается с 300 миллисекунд до 13 секунд. Это может быть связано с тем, что приложение A внутренне вызывает приложение B и приложение C, которые также защищены базовой аутентификацией. Любые предложения по решению этой проблемы будут высоко оценены.

Одно решение, которое я могу попробовать. Приложение A может считаться доверенной стороной для приложений B и C. Приложение B и C можно настроить так, чтобы избежать запуска Spring DelegatingFilterProxy, когда запросы поступают из приложения A. Вместо этого можно настроить другой фильтр для запросов, поступающих из приложения A. Новый фильтр проверит базовые учетные данные аутентификации как простое условие, сопоставив значения заголовка со значениями, хранящимися в константе.

...