2011-10-19 50 views
0

我跟隨堆棧溢出中的線程來實現這一點,但我得到一些錯誤,而我在我的代碼中使用該解決方案。彈簧安全數據庫執行異常

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authentication.ProviderManager#0': Cannot create inner bean '(inner bean)' of type [org.springframework.security.config.authentication.AuthenticationManagerFactoryBean] while setting bean property 'parent'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#8': 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 bean property 'providers' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.krams.tutorial.service.UserDetailsServiceImpl' to required type 'org.springframework.security.core.userdetails.UserDetailsService' for property 'userDetailsService'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.krams.tutorial.service.UserDetailsServiceImpl] to required type [org.springframework.security.core.userdetails.UserDetailsService] for property 'userDetailsService': no matching editors or conversion strategy found 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:281) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:125) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1317) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1076) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423) 
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723) 
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226) 
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:619) 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name '(inner bean)#8': 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 bean property 'providers' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.krams.tutorial.service.UserDetailsServiceImpl' to required type 'org.springframework.security.core.userdetails.UserDetailsService' for property 'userDetailsService'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.krams.tutorial.service.UserDetailsServiceImpl] to required type [org.springframework.security.core.userdetails.UserDetailsService] for property 'userDetailsService': no matching editors or conversion strategy found 
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149) 
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:109) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:274) 
... 23 more 
Caused by: 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 bean property 'providers' with key [0]; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.krams.tutorial.service.UserDetailsServiceImpl' to required type 'org.springframework.security.core.userdetails.UserDetailsService' for property 'userDetailsService'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.krams.tutorial.service.UserDetailsServiceImpl] to required type [org.springframework.security.core.userdetails.UserDetailsService] for property 'userDetailsService': no matching editors or conversion strategy found 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:106) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedList(BeanDefinitionValueResolver.java:355) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:153) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1317) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1076) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
at org.springframework.security.config.authentication.AuthenticationManagerFactoryBean.getObject(AuthenticationManagerFactoryBean.java:27) 
at org.springframework.security.config.authentication.AuthenticationManagerFactoryBean.getObject(AuthenticationManagerFactoryBean.java:20) 
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:142) 
... 25 more 
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0': Initialization of bean failed; nested exception is org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.krams.tutorial.service.UserDetailsServiceImpl' to required type 'org.springframework.security.core.userdetails.UserDetailsService' for property 'userDetailsService'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.krams.tutorial.service.UserDetailsServiceImpl] to required type [org.springframework.security.core.userdetails.UserDetailsService] for property 'userDetailsService': no matching editors or conversion strategy found 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190) 
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322) 
... 39 more 
Caused by: org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'org.krams.tutorial.service.UserDetailsServiceImpl' to required type 'org.springframework.security.core.userdetails.UserDetailsService' for property 'userDetailsService'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [org.krams.tutorial.service.UserDetailsServiceImpl] to required type [org.springframework.security.core.userdetails.UserDetailsService] for property 'userDetailsService': no matching editors or conversion strategy found 
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:471) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1363) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1322) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1076) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517) 
... 45 more 
Caused by: java.lang.IllegalStateException: Cannot convert value of type [org.krams.tutorial.service.UserDetailsServiceImpl] to required type [org.springframework.security.core.userdetails.UserDetailsService] for property 'userDetailsService': no matching editors or conversion strategy found 
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:291) 
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155) 
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:461) 
... 49 more 
Nov 19, 2010 10:47:34 PM org.apache.catalina.core.ApplicationContext log 
INFO: Closing Spring root WebApplicationContext 

下面是我實現

安全上下文文件

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:security="http://www.springframework.org/schema/security" 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"> 
    <security:http auto-config="true" use-expressions="true" access-denied-page="/krams 
/auth/denied"> 
    <security:intercept-url pattern="/krams/auth/login" access="permitAll" /> 
    <security:intercept-url pattern="/krams/main/admin" access="hasRole('ROLE_ADMIN')" /> 
    <security:intercept-url pattern="/krams/main/common" access="hasRole('ROLE_USER')" /> 
    <security:form-login login-page="/krams/auth/login" authentication-failure-url="/krams/auth/login?error=true" 
         default-target-url="/krams/main/common" /> 
    <security:logout invalidate-session="true" logout-success-url="/krams/auth/login" logout-url="/krams/auth/logout" /> 
    </security:http> 

    <bean id="userDetailsService" class="org.krams.tutorial.service.UserDetailsServiceImpl"></bean> 

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

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

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

我有2個領域類人,安全角色 人都有用戶名和密碼,安全方面的作用具有認證作用。

import javax.persistence.NoResultException; 
import org.krams.tutorial.domain.Person; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.dao.DataAccessException; 
import org.springframework.security.userdetails.UserDetails; 
import org.springframework.security.userdetails.UserDetailsService; 
import org.springframework.security.userdetails.UsernameNotFoundException; 
import org.springframework.stereotype.Service; 
import org.springframework.transaction.annotation.Transactional; 



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

@Autowired 
private PersonServiceImpl personService; 

@Autowired 
private Assembler assembler; 

@Transactional(readOnly = true) 
@Override 
public UserDetails loadUserByUsername(String username) 
throws UsernameNotFoundException, DataAccessException { 
try { 
Person person = personService.findByName(username); 
return (UserDetails) assembler.buildUserFromUserEntity(person); 
} catch (NoResultException e) { 
throw new UsernameNotFoundException(e.getLocalizedMessage()); 
} 
} 
} 



@Service("assembler") 
public class Assembler { 
@Transactional(readOnly = true) 
User buildUserFromUserEntity(Person person) { 

String username = person.getUserName(); 
String password = person.getPassword(); 
boolean enabled = person.getEnabled(); 
boolean accountNonExpired = person.getEnabled(); 
boolean credentialsNonExpired = person.getEnabled(); 
boolean accountNonLocked = person.getEnabled(); 

Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
for (SecurityRole role : person.getSecurityRoleSet()) { 
authorities.add(new GrantedAuthorityImpl(role.getSecurityRole())); 
} 

User user = new User(username, password, enabled, 
accountNonExpired, credentialsNonExpired, accountNonLocked, authorities); 
return user; 
} 


} 

夥計們請幫助我,它的優先權一種情況。

在此先感謝。

+2

爲什麼不發佈嵌套的異常?這就是信息所在。 –

+0

編輯了我的例外詳情 – Junaidaj

+0

您確定您正在部署您認爲正在部署的內容嗎?快速瀏覽一下(除了使用註釋和XML之外;不知道會做什麼,如果有的話)我不明白爲什麼它無法從UserDetailsS​​ervice impl轉換爲UserDetailsS​​ervice。你在包org.krams.tutorial.service中顯示的類是什麼? –

回答

3

您沒有執行正確的UserDetailsService

org.springframework.security.authentication.dao.DaoAuthenticationProvider#0

要求:org.springframework.security.core.userdetails.UserDetailsService,但你 實現:org.springframework.security.userdetails.UserDetailsService

對我來說,看起來你是在混合彈簧安全2.0和3.0。

  • org.springframework.security.core.userdetails.UserDetailsService是春季3.0
  • org.springframework.security.userdetails.UserDetailsService是Spring 2.0的

對於一個快速瀏覽在那裏封裝結構2.0和3.0的區別怎麼也得看看這個博客帖子:http://blog.springsource.com/2009/06/03/spring-security-300m1-released/,有一章節描述軟件包名稱是如何改變的。

+0

謝謝拉爾夫。這對我來說是訣竅。 – Junaidaj

+0

我在哪裏可以檢查,以便我接受你的回答 – Junaidaj

+0

@Junaidaj有這樣的灰色:答案投票旁邊的複選標記符號(工具提示:「單擊以將此答案設置爲您接受的答案」)。你應該用它來標記你提出的所有問題的正確答案。 – Ralph