Pregunta

¿Por qué siempre me userDetailDao nula excepción cuando se ejecuta:

package com.springweb.service;

import com.springweb.dao.UserDetailDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
import org.springframework.dao.DataAccessException;
import org.springframework.security.userdetails.UserDetails;
import org.springframework.security.userdetails.UserDetailsService;
import org.springframework.security.userdetails.UsernameNotFoundException;

public class UserService implements UserDetailsService
{    
    @Autowired
    UserDetailDao userDetailDao;

    public UserDetails loadUserByUsername(String string) throws UsernameNotFoundException, DataAccessException {
        return userDetailDao.queryForUser(string);
    }

}

en mi configuración de seguridad de primavera:

<security:authentication-provider user-service-ref="userService">
    <security:password-encoder hash="md5" />        
</security:authentication-provider>

<bean name="userService" class="com.springweb.service.UserService">
</bean>

y en mi contexto despachador, ya definir al paquete de análisis:

<context:component-scan base-package="com.springweb"/>
¿Fue útil?

Solución

Creo que su UserDetailDao se declara en el contexto DispatcherServlet y por lo tanto no es accesible en el contexto webapp raíz donde se declara userService. Así, UserDetailsDao debe ser declarado como un grano en el contexto de la raíz.

También es necesario <context:annotation-driven/> en el contexto de la raíz.

En general, usted tiene una duplicación de los granos de ahora - frijol se añaden al contexto DispatcherServlet por <context:component-scan>, y frijoles de las mismas clases se declaran de forma manual en el contexto de la raíz. Esta situación se debe evitar -. Necesita especificar los paquetes para ser escaneado por <context:component-scan> con más cuidado

Ver también:

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top