поэтому у меня есть класс для пользовательских данных
@Service("customUserDetailsService")
public class TimexUserDetailsService implements UserDetailsService {
@Autowired private UserService userService;
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {
TimexUser user = userService.getUserByUsername(username);
Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
for (String authority : user.getAuthorities())
authorities.add(new GrantedAuthorityImpl(authority));
return new User(username, user.getPassword(), true, true, true, true, authorities);
}
}
и xml:
<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"
xmlns:context="http://www.springframework.org/schema/context"
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.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<http use-expressions="true">
<intercept-url pattern="/home" access="permitAll" />
<intercept-url pattern="/projects/**" access="isAuthenticated()" />
<intercept-url pattern="/projects/add/**" access="hasRole('manager')" />
<form-login />
</http>
<context:annotation-config />
<context:component-scan base-package="com.yonder.timex" />
<authentication-manager>
<authentication-provider ref="customUserDetailsService" />
</authentication-manager>
</beans:beans>
, и я получаю ошибку
SEVERE: Exceptionотправка инициализированного события контекста в экземпляр прослушивателя класса org.springframework.web.context.ContextLoaderListener org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем org.springframework.security.authentication.ProviderManager # 0 ':bean-компонент '(внутренний компонент)' типа [org.springframework.security.config.authentication.AuthenticationManagerFactoryBean] при установке свойства компонента 'parent';вложенным исключением является org.springframework.beans.factory.BeanCreationException: ошибка создания компонента с именем '(внутренний компонент)': FactoryBean вызвала исключение при создании объекта;вложенным исключением является org.springframework.beans.factory.BeanCreationException: ошибка создания компонента с именем 'org.springframework.security.authenticationManager': невозможно разрешить ссылку на компонент 'customUserDetailsService' при настройке свойства компонента 'provider' с ключом [0];вложенное исключение - org.springframework.beans.factory.BeanCreationException: ошибка создания бина с именем customUserDetailsService: сбой внедрения зависимостей с автопроводкой;вложенное исключение - org.springframework.beans.factory.BeanCreationException: не удалось автоматически связать поле: private com.yonder.timex.service.UserService com.yonder.timex.TimexUserDetailsService.userService;Вложенное исключение - org.springframework.beans.factory.NoSuchBeanDefinitionException: не найден соответствующий компонент типа [com.yonder.timex.service.UserService] для зависимости: ожидается, что по крайней мере 1 компонент, который квалифицируется как кандидат для автоматической передачи этой зависимости.Аннотации зависимостей: {@ org.springframework.beans.factory.annotation.Autowired (обязательный = true)} в org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean (BeanDefinitionValue.rage.pris.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary (BeanDefinitionValueResolver.java:125) при org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues (AbstractAutowireCapableBeanFactory.java:1325) при org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean (AbstractAutowireCapableBeanFactory.java:1086) при org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean (AbstractAutowireCapableBeanFactory.java:517) в org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean (AbstractAutowireCapableBeanFactory.java:456) в орг.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject (AbstractBeanFactory.java:293) в org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton (DefaultSingletonBeanRegistry.java:222) в org.springframework.beans.factory.support.Abeta.springframework.«springframework.web.context.ContextLoader.initWebApplicationContext (ContextLoader.java:204) в org.springframework.web.context.ContextLoaderListener.contextInitialized (ContextLoaderListener.java:47) в org.apache.catalina.core.StandardContext.listenerStart (StandardContext.java:4205)в
org.apache.catalina.core.StandardContext.start (StandardContext.java:4704)
в
org.apache.catalina.core.ContainerBase.start (ContainerBase.java:1053)
в org.apache.catalina.core.StandardHost.start (StandardHost.java:840)
в
org.apache.catalina.core.ContainerBase.start (ContainerBase.java:1053)
в
org.apache.catalina.core.StandardEngine.start (StandardEngine.java:463)
в
org.apache.catalina.core.StandardService.start (StandardService.java:525)
в
org.apache.catalina.core.StandardServer.start (StandardServer.java:754)
в org.apache.catalina.startup.Catalina.start (Catalina.java:595) в
sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) в
sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:57)
в
sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
в java.lang.reflect.Method.invoke (Method.java:601) в
org.apache.catalina.startup.Bootstrap.start (Bootstrap.java:289) в
org.apache.catalina.startup.Bootstrap.main (Bootstrap.java:414)
Основная проблема заключается в том, что я хочу предоставить провайдер аутентификации моей службе пользовательских данных, но я не могу этого сделать.
Большое спасибо, Транка