Я оставлю информацию о том, как внедрить свой собственный поставщик аутентификации в другие бесчисленные примеры из Googleland и здесь StackOverflow . Похоже, это связано с маркировкой конкретного компонента с помощью XML. Но, надеюсь, я могу заполнить некоторые другие детали для вас.
Итак, вы определили класс примерно так же, как описано выше, и я добавлю больше деталей, которые вам понадобятся для Spring (то есть объедините также материал сверху.
public class SwitchingAuthenticationProvider implements AuthenticationProvider
{
....
public List<AuthenticationProvider> getProviders() { return delegateList; }
public void setProviders(List<AuthenticationProvider> providers) {
this.delegateList = providers;
}
....
}
Это позволит вам ввести множество провайдеров, используя spring:
<bean id="customAuthProvider1" class=".....CustomProvider1"> ... </bean>
<bean id="customAuthProvider2" class=".....CustomProvider2"> ... </bean>
...
<bean id="customAuthProviderX" class=".....CustomProviderX"> ... </bean>
<bean id="authenticationProvider" class="....SwitchingAuthenticationProvider">
<security:custom-authentication-provider/>
<!-- using property injection (get/setProviders) in the bean class -->
<property name="providers">
<list>
<ref local="customAuthProvider1"/> <!-- Ref of 1st authenticator -->
<ref local="customAuthProvider2"/> <!-- Ref of 2nd authenticator -->
...
<ref local="customAuthProviderX"/> <!-- and so on for more -->
</list>
</property>
</bean>
В конце концов, то, как вы заполняете провайдеров, может быть любым способом получения делегатом набора провайдеров. Как они отображают, какой использовать, зависит от вас. Коллекция может быть именованной, основанной на текущем состоянии делегатора. Это может быть список из более чем одного, чтобы попробовать. Это может быть два свойства, «get / setPrimary» и «get / setSecondary» для функции переключения при сбое. После того, как делегат введен, возможности остаются за вами.
Дайте мне знать, если это не отвечает на ваш вопрос.