#spring #authentication #spring-mvc #rss #spring-security
#spring #аутентификация #spring-mvc #RSS-канал #spring-безопасность
Вопрос:
Мое приложение защищено с помощью Spring Security и проходит аутентификацию в LDAP. Проблема в том, что RSS-канал также должен быть защищен, разрешая доступ только зарегистрированным пользователям, но без перенаправления на страницу входа.
Существует ли стандартный подход для решения этой проблемы?
Ответ №1:
Вы могли бы попробовать принудительно отправлять учетные данные через HTTP-заголовки (базовая аутентификация выполняется по протоколу HTTPS) и отключить как форму входа, так и сеансовые файлы cookie. Сделайте это, установив create-session
атрибут и поместив http-basic
элемент внутри него.
<security:http create-session="never">
<security:http-basic />
...
</security:http>
Комментарии:
1. Спасибо, но проблема в том, что пользователи входят в систему, используя форму входа и сеансовые файлы cookie. Мне это просто нужно, потому что RSS-клиенты не будут понимать аутентификацию при входе в систему.
2. @Sinuhe: RSS-клиенты не могут использовать форму авторизации для входа, поэтому у вас нет альтернативы, кроме как использовать что-то, что действительно работает. Но вы можете настроить разные методы входа в систему по разным путям (смотрите раздел документов Spring Security о цепочке фильтров и
DelegatingFilterProxy
классе о том, как это сделать).
Ответ №2:
Одним из способов сделать это было бы предоставить каждому пользователю какой-либо токен, который находится в конце URL-адреса RSS. Затем вы можете сопоставлять пользователей с токенами и не отправлять ответ RSS, пока не получите соответствующий токен.
Вы могли бы аутентифицировать токен несколькими различными способами:
- Подключитесь к архитектуре аутентификации Spring Security, написав поставщика аутентификации
- Обработайте соответствие в контроллере, который выводит RSS-канал.
Это не так безопасно, как обычный просмотр при входе пользователя в систему, но это более безопасно, чем просто открытый URL, который может использовать любой.