Vamos ha explicar como configurar fácilmente Spring Security ( Acegi ) para que nos autentique los usuarios mediante Hibernate - Dao.
La única clase que debemos crear es una implementación de la interfaz
org.springframework.security.userdetails.UserDetailsService
que declara un metodo
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException {
En este método es donde tenemos que realizar toda la recogida de los datos de nuestro modelo de usuarios y roles especifico. Para devolver una instancia de la siguiente clase
org.springframework.security.userdetails.User
El constructor de esta clase recibe un array de GrantedAuthority[] yo he utilizado este metodo para que convertir los nombres de los roles de mi modelo a este Array
public static GrantedAuthority[] convertToGrantedAuthorityArray(Collection roles) {
GrantedAuthority[] result = new GrantedAuthority[roles.size()];
int i = 0;
for (String role : roles) {
result[i++] = new GrantedAuthorityImpl(role);
}
return result;
}
Lo mas sencillo es añadir una Annotation @Service a la clase y el nombre que le demos a la clase es el que debemos añadir en authentication-provider.
Lo siguiente es añair el filtro en nuestro web.xml y crear el archivo de configuración de spring.
securityFilter
org.springframework.web.filter.DelegatingFilterProxy
targetBeanName
springSecurityFilterChain
securityFilter
/*
Para organizarnos mejor creamos un archivo de configuración para el Acegi, en mi caso lo nombro applicationContext-security.xml y yo no tengo que tocar el context-param por le pattern pero sino tendriamos que añadirlo a mano.
contextConfigLocation
/WEB-INF/applicationContext*.xml
Por ultimo personalizamos las reglas de acceso segun necesitemos, aqui pongo un ejemplo sencillo
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd">
login-processing-url="/j_security_check"/>
Con esto tendriamos la autenticación, en siguientes posts quisiera poner como encriptar las contraseñas así como utilizar jsr250-annotations