spring-mvc spring-security

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.