spring mvc - ¿Cómo implementar la autenticación personalizada en Spring Security 3?
spring-mvc spring-security (1)
En la mayoría de los casos, cuando solo se utilizan nombres de usuario y contraseñas para autenticaciones y roles para la autorización, la implementación de su propio UserDetailsService es suficiente.
El flujo de la autenticación de la contraseña del nombre de usuario es generalmente como sigue:
- Un filtro de seguridad de resorte (autenticación básica / formulario / ...) recoge el nombre de usuario y la contraseña, lo convierte en un objeto UsernamePasswordAuthentication y lo pasa al AuthenticationManager
- El administrador de autenticación busca un proveedor candidato que pueda manejar UsernamePasswordtokens, que en este caso es el DaoAuthenticationProvider y pasa el token para la autenticación
- El proveedor de autenticación invoca el método loadUserByUsername interface y lanza una excepción UsernameNotFound si el usuario no está presente o devuelve un objeto UserDetails, que contiene un nombre de usuario, contraseña y autorizaciones.
- El proveedor de autenticación luego compara las contraseñas del objeto UsernamePasswordToken y UserDetails. (También puede manejar hashes de contraseña a través de PasswordEncoders) Si no coincide, la autenticación falla. Si coincide, registra el objeto de detalles del usuario y lo pasa a AccessDecisionManager, que realiza la parte de Autorización.
Por lo tanto, si la verificación en DaoAuthenticationProvider satisface sus necesidades. Entonces solo tendrás que implementar tu propio UserDetailsService y modificar la verificación del DaoAuthenticationProvider.
Un ejemplo para el UserDetailsService usando spring 3.1 es el siguiente:
XML de primavera:
<security:authentication-manager>
<security:authentication-provider user-service-ref="myUserDetailsService" />
</security:authentication-manager>
<bean name="myUserDetailsService" class="x.y.MyUserDetailsService" />
UserDetailsService Implementación:
public MyUserDetailsService implements UserDetailsService {
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
//Retrieve the user from wherever you store it, e.g. a database
MyUserClass user = ...;
if (user == null) {
throw new UsernameNotFoundException("Invalid username/password.");
}
Collection<? extends GrantedAuthority> authorities = AuthorityUtils.createAuthorityList("Role1","role2","role3");
return new User(user.getUsername(), user.getPassword(), authorities);
}
}
Sé que esto ha sido contestado tantas veces, pero estoy confundido. Ya tengo un mecanismo de autenticación en mi aplicación y solo quiero usar la parte de autorización de Spring MVC. Estoy usando Spring MVC 3 y Spring Security 3.
Cuando busco en Internet encontré dos soluciones, la primera es simplemente implementar la interfaz de AuthenticationProvider. Example1 . El segundo es implementar UserDetails y UserDetailsService, Example2 , así que estoy perdido aquí.
----Actualizar----
La segunda parte de la pregunta está here . Y la solución a la solución.