Spring Security 3.1.0.RC1: с несколькими элементами <http... /> почему я могу зарегистрировать только один менеджер аутентификации?

У меня есть следующая конфигурация с несколькими <http.../> элементы (для отдельной поддержки аутентификации REST через базовую аутентификацию и логин формы пользователя):

<security:http auto-config="false" pattern="/service/**" create-session="never" 
               entry-point-ref="basicAuthenticationEntryPoint" >
    <security:intercept-url pattern="/service/**" requires-channel="any" access="ROLE_REST_SERVICE" />
    <security:custom-filter position="BASIC_AUTH_FILTER" ref="basicAuthenticationFilter" />
</security:http>

<security:http auto-config="false" pattern="/**"
               entry-point-ref="loginUrlAuthenticationEntryPoint" >
    <security:logout logout-url="/logout" />
    <security:anonymous enabled="false"/>
    <security:custom-filter position="FORM_LOGIN_FILTER" ref="usernamePasswordAuthenticationFilter" />
    <security:custom-filter position="ANONYMOUS_FILTER" ref="anonymousAuthFilter" />
</security:http>

В каждом из моих двух фильтров, требующих аутентификации (FORM_LOGIN_FILTER и BASIC_AUTH_FILTER), я ссылаюсь на два разных менеджера аутентификации.

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

Зачем мне использовать один диспетчер аутентификации, если я заранее знаю, какой провайдер аутентификации понадобится для каждого фильтра?

Должен ли я не использовать менеджер аутентификации и просто начать AuthenticationProvider как боб и передать его в фильтр непосредственно как AuthenticationManager?

1 ответ

Решение

В Spring Security 3.1 вы можете иметь несколько http-элементов, каждый со своим собственным менеджером аутентификации.

Единственное, что вам нужно сделать, это добавить следующий атрибут authentication-manager-ref="your ref" к элементу http.

Другие вопросы по тегам