Безопасность Spring - как упомянуть как основанную на форме, так и базовую аутентификацию

Можно ли упомянуть как основанную на форме, так и базовую аутентификацию в безопасности Spring с использованием конфигурации пространства имен, не переопределяя другие? Чтобы приложение могло обслуживать как запросы на основе браузера, так и удаленного клиента.

Ответы на вопрос(3)

ответ @grimesjm правильно. Однако, если вы используете Spring 3.x, вы должны адаптировать имена классов к:

<bean id="basicProcessingFilter" class="org..security.web.authentication.www.BasicAuthenticationFilter">
    <property name="authenticationManager">
        <ref bean="authenticationManager" />
    </property> 
    <property name="authenticationEntryPoint">
        <ref bean="authenticationEntryPoint" />
    </property>
</bean>

<bean id="authenticationEntryPoint"
    class="org..security.web.authentication.www.BasicAuthenticationEntryPoint">
    <property name="realmName" value="Your realm here" />
</bean>

А также

<sec:http auto-config="true">
    ... your intercept-url here

    <sec:custom-filter before="SECURITY_CONTEXT_FILTER" ref="basicProcessingFilter" />

    <sec:form-login ... />
    ....
</sec:http>

Я не знаю, стоит ли размещать фильтр раньшеSECURITY_CONTEXT_FILTER лучший вариант или нет.

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

Ссылка на spri, нг сообщество:http://forum.springsource.org/showthread.php?t=72724&highlight=form+basic+authentication

 Jurgen Hannaert04 нояб. 2010 г., 21:50
Они добавили возможность добавлять несколько конфигураций <security: http, в Spring Security версии 3.1.0.M1 ..., которая еще не выпущена. Другой обходной путь - создать отдельную войну. В моем случае у нас есть веб-приложение (аутентификация на основе формы) и API остальных (базовая аутентификация). Я создал ядро, веб и модуль maven отдыха. В конце концов, это даже чистое решение, которое я нахожу.

который вы хотите, возможен, я столкнулся с той же самой проблемой, и вот мое решение.

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

Чтобы обойти это, удалите тег http-basic из пространства имен, затем вручную определите bean-компонент для обработки базовой аутентификации и разместите его порядок перед AuthenticationProcessingFilter, потому что это весенний фильтр безопасности, который будет обрабатывать вход в форму.

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

Теперь, вручную определяя bean-компонент BasicProcessingFilter, мы можем установить порядок его появления в цепочке фильтров. Ниже приведен пример дополнительных объявлений xml, которые вам нужно будет предоставить в xml безопасности (Spring Security <3.x)

<bean id="basicProcessingFilter" class="org.springframework.security.ui.basicauth.BasicProcessingFilter">
    <property name="authenticationManager"><ref bean="authenticationManager"/></property>
     <security:custom-filter before="AUTHENTICATION_PROCESSING_FILTER"/>
    <property name="authenticationEntryPoint"><ref bean="authenticationEntryPoint"/></property>
</bean>

<bean id="authenticationEntryPoint"
    class="org.springframework.security.ui.basicauth.BasicProcessingFilterEntryPoint">
              <property name="realmName" value="My Realm Here"/>
</bean>

Также обратите внимание, что если ваша ссылка authenticationManager не найдена, вы можете добавить псевдоним в ваше пространство имен, как показано ниже.

<security:authentication-manager alias="authenticationManager"/>

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

Проблема с этим подходом состоит в том, что, если учетные данные введены правильно, ответом будет страница входа в систему из фильтра формы входа.

Тем не менее, похоже, что эта проблема будет исправлена весной в версии 3.1 безопасности пружин, и это обходной путь больше не понадобится.

Ваш ответ на вопрос