Разрешение безопасности Spring выбрать реализацию класса, реализующего пользовательский поставщик аутентификации

У нас есть веб-приложение, которое реализует пользовательскую аутентификацию через AuthenticationProvider. Теперь это работает нормально. Но мы хотим предоставить клиенту возможность реализовать собственный класс аутентификации, реализующий AuthenticationProvider. Поэтому они удалят нашу банку из приложения и добавят ее в classpath.

Похоже, в xml безопасности нам нужно указать только класс, реализующий AuthenticationProvider, но не могу сказать Spring, чтобы выбрать какой-либо класс, реализующий интерфейс AuthenticationProvider.

Текущая реализация XML и класса

<authentication-manager alias="authenticationManager">
    <authentication-provider ref="customAuthenticationProvider"/>
</authentication-manager>

<beans:bean id="customAuthenticationProvider" class="w.x.y.z.CustomAuthenticationProvider"></beans:bean



@Component
public class CustomAuthenticationProvider implements AuthenticationProvider {

    @Override
    public Authentication authenticate(Authentication authentication) throws AuthenticationException {
    //Implementation
    }

    @Override
    public boolean supports(Class<?> arg0) {
        return true;
    }
}

В любом случае я могу сказать Spring, чтобы выбрать любой класс, реализующий AuthenticationProvider?

1 ответ

Решение

Может быть, вы можете сделать это, используя тип autowiring и фабричный метод:

1-The CustomAuthenticationProvider он будет введен по типу autowiring, определенному только в банке, добавленной вашим клиентом, и в удаленной банке (это должен быть ровно один экземпляр AuthenticationProvider).

2-И затем используйте фабричный метод для внедрения этого провайдера в менеджер аутентификации.

1-й шаг

public class AuthenticationProviderFactory {

    @Autowired
    private AuthenticationProvider authProvider;

    public AuthenticationProvider getAuthenticationProvider() {
        return authProvider;
    }

}

2-х секундный шаг

<bean name="authenticationProviderFactory"
  class="w.x.y.z..AuthenticationProviderFactory"></bean>

<bean name="authenticationProvider" factory-bean="authenticationProviderFactory"
factory-method="getAuthenticationProvider">
</bean>
<authentication-manager alias="authenticationManager">
   <authentication-provider ref="authenticationProvider"/>
</authentication-manager>

!!!! Удаленная банка и новая банка должны иметь одинаковые applicationContext.xml имя (где AuthenticationProvider заявлено) сделать замену работающей.

<import resource="applicationContextAuthProvider.xml"/>
Другие вопросы по тегам