Autenticación de base de datos Spring Security 3 con Hibernate

Necesito autenticar usuarios de la base de datos, los documentos de Spring Security no indican cómo autenticarse con hibernación. ¿Es eso posible y cómo puedo hacer eso?

Tienes que crear tu propio proveedor de autenticación personalizado.

Código de ejemplo:

Servicio para cargar usuarios de Hibernate:

import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; @Service("userDetailsService") public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private UserDao dao; @Autowired private Assembler assembler; @Transactional(readOnly = true) public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { UserDetails userDetails = null; UserEntity userEntity = dao.findByName(username); if (userEntity == null) throw new UsernameNotFoundException("user not found"); return assembler.buildUserFromUserEntity(userEntity); } } 

Servicio para convertir su entidad a un objeto de usuario de spring:

 import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.GrantedAuthorityImpl; import org.springframework.security.core.userdetails.User; @Service("assembler") public class Assembler { @Transactional(readOnly = true) User buildUserFromUserEntity(UserEntity userEntity) { String username = userEntity.getName(); String password = userEntity.getPassword(); boolean enabled = userEntity.isActive(); boolean accountNonExpired = userEntity.isActive(); boolean credentialsNonExpired = userEntity.isActive(); boolean accountNonLocked = userEntity.isActive(); Collection authorities = new ArrayList(); for (SecurityRoleEntity role : userEntity.getRoles()) { authorities.add(new GrantedAuthorityImpl(role.getRoleName())); } User user = new User(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities, id); return user; } } 

El application-context-security.xml basado en el espacio de nombres se vería así:

                      

Si está utilizando una base de datos accesible de JDBC, puede usar el siguiente proveedor de autenticación y evitar crear uno personalizado. Reduce el código requerido para 9 líneas de XML:

    

A continuación, puede configurar su dataSource de la siguiente manera

       

Eche un vistazo a esta publicación: http://codehustler.org/blog/spring-security-tutorial-form-login/ Incluye todo lo que necesita saber sobre la personalización de Spring Security form-login.

Una configuración de Java podría ser algo como esto

 @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsServiceImpl userDetailsService; @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { DaoAuthenticationProvider daoAuthenticationProvider = new DaoAuthenticationProvider(); daoAuthenticationProvider .setUserDetailsService(userDetailsService); auth.authenticationProvider(daoAuthenticationProvider); } }