Pregunta

Uso de la primavera de Seguridad he descrito un DaoAuthenticationProvider como aquí:

http: // estática. springsource.org/spring-security/site/docs/2.0.x/reference/dao-provider.html

También he almacenamiento en caché (también como se describe en este artículo).

El problema es que cuando llega una solicitud con un buen nombre de usuario (que ya está en la memoria caché), pero una mala contraseña - se devuelve al usuario de la caché como si es un buen nombre de usuario / contraseña. Debido a que utiliza el nombre de usuario como la clave, la clave no está involucrado en absoluto.

El código exacto que devuelve al usuario de la caché:

UserDetails user = this.userCache.getUserFromCache(username);

¿Alguien alguna vez se ocupó de este problema antes? También puedo comprobar si la contraseña es la misma, pero sería algo personalizado.

Gracias.

¿Fue útil?

Solución

Si ha configurado su aplicación con los componentes estándar, el escenario debe ser el siguiente:

  1. A petición del usuario llegada se crea el objeto Authentication y poblada con nombre de usuario y la contraseña suministrada por el usuario.

  2. detalles del usuario se recuperan: si es posible, UserCache se utiliza para recuperar datos de usuario previamente almacenados en caché (es decir getUserFromCache se llama, ya sea por las implementaciones de UserDetailsService o AuthenticationProvider antes se realiza la llamada a AuthenticationManager ). Y es 100% Aceptar que los datos de usuario de caché vendrán con la contraseña bueno.

  3. Después de comprobaciones básicas pre-autenticación (credenciales de caducidad etc.) se produce la autenticación real. En este punto, la contraseña de usuario en caché de datos se compara con la contraseña almacenada en el objeto Authentication suministrado (que actualmente contiene la contraseña incorrecta). En este intento de autentificación del punto de falla.

Sin embargo, si se implementa su AuthenticationProvider o AuthenticationManager, que son responsables de la comprobación de contraseña.

Otros consejos

¿Cuál es el código que originalmente se pone al usuario de la base de datos y lo almacena en caché? ¿Se comprueba la contraseña? Suena como que tiene un problema de abstracción - primavera de Seguridad no debe saber dónde está el usuario está viniendo (DB o caché) y debe utilizar la misma lógica de cualquier manera

.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top