2012-09-08 13 views
5

Sigo recibiendo la excepción con un mensaje: "org.springframework.beans.factory.NoSuchBeanDefinitionException: Ningún bean llamado 'userDetailsService' se define" aunque el bean se define como un servicio en la clase UserDetailsServiceImpl. Tales como:Spring y Spring configuración de seguridad ayuda, no se puede encontrar un bean

@Service(value="userDetailsService") 
public class UserDetailsServiceImpl implements UserDetailsService{ 

Estoy utilizando lo último en seguridad de primavera y primavera.

No estoy seguro de lo que estoy haciendo mal. Estoy pegando la configuración de mis archivos primavera xml. Spring-security.xml muestra que puede encontrar beans de servlet-context.xml cuando se usa el componente-scan.

Gracias

org.springframework.beans.factory.BeanCreationException: Error creating bean with name org.springframework.security.filterChains': Cannot resolve reference to bean org.springframework.security.web.DefaultSecurityFilterChain#0' while setting bean property sourceList' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name org.springframework.security.web.DefaultSecurityFilterChain#0': Cannot resolve reference to bean org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0' while setting constructor argument with key [2]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0': Cannot resolve reference to bean org.springframework.security.authentication.ProviderManager#0' while setting bean property authenticationManager'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name org.springframework.security.authentication.ProviderManager#0': Cannot resolve reference to bean 'org.springframework.security.config.authentication.AuthenticationManagerFactoryBean#0' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name org.springframework.security.config.authentication.AuthenticationManagerFactoryBean#0': FactoryBean threw exception on object creation; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name org.springframework.security.authenticationManager': Cannot resolve reference to bean org.springframework.security.authentication.dao.DaoAuthenticationProvider#0' while setting constructor argument with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name org.springframework.security.authentication.dao.DaoAuthenticationProvider#0': Cannot resolve reference to bean 'userDetailsService' while setting bean property 'userDetailsService'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'userDetailsService' is defined 

primavera-security.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/security" 
xmlns:beans="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security-3.1.xsd"> 


<beans:import resource="classpath*:servlet-context.xml"/> 

<global-method-security secured-annotations="enabled"></global-method-security>  

<http auto-config="true" > 
    <!-- Filtering url patterns --> 

    <!-- Anonymous users --> 
    <intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 

    <!-- Login and logout controls --> 
    <form-login login-page="/login" default-target-url="/profile" 
     authentication-failure-url="/loginfailed" /> 
    <logout invalidate-session="true" logout-success-url="/" 
     delete-cookies="JSESSIONID" /> 

</http> 

<beans:bean id="authenticationProvider" 
    class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"> 
    <beans:property name="userDetailsService" ref="userDetailsService"/> 
</beans:bean> 



<beans:bean id="authenticationManager" 
    class="org.springframework.security.authentication.ProviderManager"> 
    <beans:property name="providers"> 
     <beans:list> 
      <beans:ref local="authenticationProvider" /> 
     </beans:list> 
    </beans:property> 
</beans:bean> 

<authentication-manager> 
    <authentication-provider user-service-ref="userDetailsService"> 
    </authentication-provider> 
</authentication-manager>  

servlet-context.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/mvc" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:beans="http://www.springframework.org/schema/beans" 
xmlns:context="http://www.springframework.org/schema/context" 
xmlns:tx="http://www.springframework.org/schema/tx" 
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
    http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 


<annotation-driven /> 

<resources mapping="/resources/**" location="/resources/" /> 

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> 
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
    <beans:property name="prefix" value="/WEB-INF/views/" /> 
    <beans:property name="suffix" value=".jsp" /> 
</beans:bean> 

               <!-- Data source configuration --> 

<!-- JDBC configuration for ORM --> 
<beans:bean id="dbDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
    <beans:property name="url" value="jdbc:mysql://localhost:3306/dbName"/> 
    <beans:property name="username" value="root"/> 
    <beans:property name="password" value=""/> 
</beans:bean> 

<!-- Hibernate session Factory --> 
<beans:bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
    <beans:property name="dataSource" ref="dbDataSource" /> 

    <!-- All the model packages with hibernate annotations that need to be scanned. --> 
    <beans:property name="packagesToScan"> 
     <beans:value> 
      com.package.registration.models 
     </beans:value> 
    </beans:property> 

    <!-- Hibernate specific properties --> 
    <beans:property name="hibernateProperties"> 
     <beans:props> 
      <beans:prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</beans:prop> 
      <beans:prop key="hibernate.show_sql">true</beans:prop> 
      <beans:prop key="hibernate.format_sql">true</beans:prop> 
      <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop> 
      <beans:prop key="org.hibernate.transaction">true</beans:prop> 
     </beans:props> 
    </beans:property> 
</beans:bean> 

<!-- A transaction manager for working with Hibernate SessionFactories --> 
<beans:bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
    <beans:property name="sessionFactory" ref="sessionFactory"/> 
</beans:bean> 

<tx:annotation-driven transaction-manager="transactionManager" /> 

<context:component-scan base-package="com.package.app" /> 

+0

Puede que desee formatear esa excepción para que no tengamos que desplazarnos demasiado hacia la derecha. –

Respuesta

7

Debe realizar un escaneo de componentes en su otro archivo de configuración de Spring, no solo en la configuración del servlet.

Son contextos diferentes, uno cargado por el oyente del cargador de contexto, uno por el servlet del despachador.

+0

Gracias, me acabo de dar cuenta de que servlet-context.xml es DispatcherServlet específico. Así que eliminé toda la configuración de allí e inserté en un nuevo archivo spring.xml. Lo agregué a contextConfigLocation en el web.xml. ¡Ahora funciona! – user724535

3

Asegúrese de que añade

<context:annotation-config /> 
<context:component-scan base-package="<your package name" /> 

Para contexto de aplicación, de lo contrario la primavera no sabrá dónde buscar los granos declarados con anotaciones. Tenga en cuenta que Spring escaneará el paquete que especifique y todos los subpaquetes.

Cuestiones relacionadas