2012-09-08 52 views
5

Tôi tiếp tục nhận ngoại lệ với một thông báo: "org.springframework.beans.factory.NoSuchBeanDefinitionException: Không có bean nào được đặt tên 'userDetailsService' được xác định" mặc dù bean được định nghĩa là một dịch vụ trong lớp UserDetailsServiceImpl. Chẳng hạn như:Trợ giúp cấu hình bảo mật mùa xuân và mùa xuân, không thể tìm thấy bean

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

Tôi đang sử dụng Bảo mật mùa xuân và mùa xuân mới nhất.

Tôi không chắc mình đang làm gì sai. Tôi đang dán cấu hình các tệp xml mùa xuân của mình. Spring-security.xml cho thấy rằng nó có thể tìm thấy các bean từ servlet-context.xml khi sử dụng quét thành phần.

Cảm ơn bạn

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 

mùa xuân-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

Có thể muốn định dạng ngoại lệ đó để chúng tôi không phải cuộn sang bên phải khá nhiều. –

Trả lời

7

Bạn cần phải đặt quét thành phần trong tệp cấu hình Spring khác của bạn, không chỉ cấu hình servlet.

Chúng là các ngữ cảnh khác nhau, một ngữ cảnh được trình xử lý bộ tải ngữ cảnh tải, một bởi servlet điều phối.

+0

Cảm ơn, tôi vừa nhận ra rằng servlet-context.xml là DispatcherServlet cụ thể. Vì vậy, tôi đã xóa tất cả cấu hình từ đó và chèn vào tệp spring.xml mới. Tôi đã thêm rằng vào contextConfigLocation trong tệp web.xml. Nó hoạt dộng bây giờ! – user724535

3

Hãy chắc chắn rằng bạn thêm

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

Để bạn bối cảnh ứng dụng, nếu không mùa xuân sẽ không biết được nơi để tìm kiếm đậu tuyên bố với các chú thích. Lưu ý, Spring sẽ quét gói bạn chỉ định và tất cả các gói con.

Các vấn đề liên quan