2012-09-08 9 views
5

Continuo a ricevere l'eccezione con un messaggio: "org.springframework.beans.factory.NoSuchBeanDefinitionException: Nessun bean denominato 'userDetailsService' è definito" anche se il bean è definito come un servizio nella classe UserDetailsServiceImpl. Ad esempio:Aiuto di configurazione sicurezza Spring e Spring, impossibile trovare un bean

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

Sto usando l'ultima sicurezza primavera e primavera.

Non sono sicuro di cosa sto facendo male. Sto incollando la configurazione dei miei file xml primaverili. Spring-security.xml mostra che può trovare i bean da servlet-context.xml quando si utilizza component-scan.

Grazie

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

Potrebbe voler formattare quell'eccezione in modo da non dover scorrere abbastanza a destra. –

risposta

7

È necessario inserire una scansione dei componenti nell'altro file di configurazione di Spring, non solo nella configurazione del servlet.

Sono contesti diversi, uno caricato dal listener del caricatore di contesto, uno dal servlet del dispatcher.

+0

Grazie, mi sono appena reso conto che servlet-context.xml è specifico per DispatcherServlet. Così ho rimosso tutta la configurazione da lì e inserito in un nuovo file spring.xml. L'ho aggiunto a contextConfigLocation nel web.xml. Ora funziona! – user724535

3

Assicurati di aggiungere

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

A voi contesto di applicazione, altrimenti Primavera non saprà dove cercare i fagioli dichiarate con le annotazioni. Nota, Spring eseguirà la scansione del pacchetto specificato e di tutti i pacchetti secondari.