0

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

Он появляется в XML безопасности, нам нужно указать только класс реализации AuthenticationProvider, но не могу сказать весной, чтобы выбрать любой класс в реализации интерфейса 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; 
    } 
} 

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

ответ

1

Может быть, вы можете сделать это с помощью типа автоматического связывания и фабричного метод:

1-The CustomAuthenticationProvider будет введены по типу автоматического связыванию определенного только в банке добавленной вашего клиента и удаленной банка (она должна быть точно один экземпляр 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"/> 
Смежные вопросы