Аутентификация на основе Spring Security для службы REST

#authentication #rest #spring-security

#аутентификация #rest #spring-безопасность

Вопрос:

Я нахожусь в процессе внедрения службы REST с Spring MVC и Spring Security (оба 3.0.5). Я использую пространство имен security, не определяя компоненты Spring вручную. У меня возникли некоторые трудности с процессом входа в систему. Чего я пытаюсь достичь, так это:

сообщение на URL / login запустило бы процесс аутентификации.

Фактической формы быть не должно, поэтому я не использую form-login… элемент. Без этого элемента UsernamePasswordAuthenticationFilter отсутствует в цепочке безопасности, поэтому я подумал, что добавлю его через пользовательский фильтр…элемент и переходите оттуда.

В этом суть, а не в вопросах:

  • это хороший способ реализовать аутентификацию?
  • как именно я должен добавить этот фильтр и на какой позиции в цепочке фильтров?
  • достаточно ли добавить этот фильтр или мне нужно что-то еще?

Приветствуется любая обратная связь. Спасибо.

Ответ №1:

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

1) Как я уже говорил выше, вы должны использовать beans. Ознакомьтесь с этой статьей для получения дополнительной информации: http://blog.springsource.com/2010/03/06/behind-the-spring-security-namespace/ Но то, к чему вы стремитесь, также будет работать с требованиями, которые вы упомянули до сих пор.
2) Она должна быть добавлена следующим образом:
<http>
<custom-filter position="FORM_LOGIN_FILTER" ref="myFilter" />
</http>
<beans:bean id="myFilter" class="org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter"/>

3) Обратите внимание, что этот фильтр также выполнял бы перенаправление по умолчанию на исходный запрос. Итак, если вам не нужно никакого перенаправления и клиенту должен быть возвращен простой HTTP 200, вам следует реализовать свой собственный AuthenticationProcessingFilter.

Я надеюсь, что это поможет.