Showing posts with label acegi. Show all posts
Showing posts with label acegi. Show all posts

Sunday, April 19, 2009

Spring Security Dao Authentication Provider

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