Spring Security: белый список IP-адресов перед переходом на базовую аутентификацию HTTP

У меня есть один URL-адрес, доступный через сервлет, который я заблокировал с помощью DaoAuthenticationProvider Spring Security. Теперь у меня есть требование, чтобы определенные входящие IP-адреса были занесены в белый список и поэтому не запрашивались для аутентификации.

Я могу достаточно легко обойти это, переопределив метод аутентификации DaoAuthenticationProvider и обойдя реализацию суперклассов, если IP-адрес совпадает с известным IP-адресом, но тогда это работает только тогда, когда отправитель запроса предоставляет имя пользователя и пароль (даже если это ерунда). В противном случае провайдер не вызывается.

Как лучше всего это сделать? Должен ли я использовать фильтр для обхода процедуры аутентификации, если входящий IP-адрес известен?


person NeilInglis    schedule 28.02.2011    source источник


Ответы (2)


Я думаю, что идиоматический способ Spring Security сделать это - реализовать фильтр предварительной аутентификации, который будет заполнять контекст безопасности допустимым объектом Authentication, когда клиент находится в белом списке. Вы можете реализовать такой фильтр с нуля (например, как здесь) или используйте AbstractPreAuthenticatedProcessingFilter (хотя это кажется слишком сложным для вашей задачи).

person axtavt    schedule 28.02.2011
comment
Спасибо, это кажется лучшим способом сделать что-то. Я удалил пользовательский DaoAuthenticationProvider, расширил GenericFilterBean и добавил в контекст объект Authentication. - person NeilInglis; 28.02.2011

Не могли бы вы просто использовать hasIpAddress()выражение? Мы делаем это для похожего случая.

<security:intercept-url pattern="/services/**" access="hasIpAddress('192.168.1.0/24')"/>
person dbreaux    schedule 08.08.2011
comment
Я не думаю, что вы можете изменить IP-адреса во время выполнения таким образом? - person gerrytan; 19.07.2015
comment
Как мы могли бы реализовать это с помощью аннотаций для конкретных отображений в контроллере? - person rj2700; 10.02.2017