studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java spring-security

java - programacion - En memoria y proveedores personalizados todos juntos



manual de programacion android pdf (2)

Estoy configurando mi aplicación web Spring Security (v4.0.1). Quiero tener dos proveedores de autenticación, uno "en memoria" para administrar la cuenta de administrador y uno personalizado que se refiere a mi propia implementación. El sistema debe intentar primero la autenticación contra el proveedor "en memoria" y contra el personalizado en segundo lugar. Mi código se ve así:

@Autowired public void configureGlobal(AuthenticationManagerBuilder auth, AuthenticationProvider provider) throws Exception { auth.inMemoryAuthentication() .withUser("admin") .password("s3cr3t") .authorities("ADMIN"); auth.authenticationProvider(provider); }

Sin embargo, este código lleva al marco a probar primero mi implementación personalizada. Tiene un poco de sentido, ya que el método AuthenticationManagerBuilder#authenticationProvider agrega un Proveedor a la Lista interna mientras que AuthenticationManagerBuilder#inMemoryAuthentication lo configura internamente. ¿Cómo podría lograr que funcione?


Puede crear su InMemoryUserDetailsManagerConfigurer manual y decirle que se configure en AuthenticationManagerBuilder cuando haya terminado de configurarlo para que instale AuthenticationProvider antes que el personalizado:

@Autowired public void configureGlobal(AuthenticationManagerBuilder auth, AuthenticationProvider provider) throws Exception { inMemoryConfigurer() .withUser("admin") .password("s3cr3t") .authorities("ADMIN") .and() .configure(auth); auth.authenticationProvider(provider); } private InMemoryUserDetailsManagerConfigurer<AuthenticationManagerBuilder> inMemoryConfigurer() { return new InMemoryUserDetailsManagerConfigurer<>(); }

Normalmente, lo que ocurre es que InMemoryUserDetailsManagerConfigurer se crea y se agrega a la lista de configuradores que se deben aplicar cuando se crea AuthenticationManager , que es después de que haya instalado su AuthenticationProvider personalizado.


Más o menos de la documentación de spring.io

Si está utilizando la configuración XML (por ejemplo, spring-security.xml):

<security:authentication-manager> <security:authentication-provider ref="FirstProvider" /> <security:authentication-provider ref="SecondProvider" /> </security:authentication-manager>

(Estoy usando esa configuración para uno de los proveedores de autenticación integrados de Spring junto a uno personalizado, funciona bien)

Si está utilizando Java Config, solo puedo hacer referencia a la Maclema de correo de otra persona en Java config para múltiples proveedores de autenticación , ya que nunca (con éxito) he intentado con la configuración del código