Spring安全数据库实现异常 [英] Spring security database implementation exception

查看:112
本文介绍了Spring安全数据库实现异常的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我跟随堆栈溢出中的线程来实现这一点,但是当我在代码中使用该解决方案时出现了一些错误。

  org.springframework.beans.factory.BeanCreationException:错误创建名称为豆 'org.springframework.security.authentication.ProviderManager#0':不能类型的创建内部bean '(内部bean)'[org.springframework.security .config.authentication.AuthenticationManagerFactoryBean],同时设置bean属性'parent';嵌套异常是org.springframework.beans.factory.BeanCreationException:创建名为'(内部bean)#8'的Bean时出错:FactoryBean在创建对象时抛出异常;嵌套异常是org.springframework.beans.factory.BeanCreationException:使用名称'org.springframework.security.authenticationManager'创建bean时出错:设置时无法解析对bean'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0'的引用具有键[0]的bean属性提供者;嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建名为'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0'的bean时出错:bean初始化失败;嵌套异常是org.springframework.beans.ConversionNotSupportedException:未能将类型'org.krams.tutorial.service.UserDetailsS​​erviceImpl'的属性值转换为属性'userDetailsS​​ervice'所需的类型'org.springframework.security.core.userdetails.UserDetailsS​​ervice' ;嵌套异常是java.lang.IllegalStateException:无法将属性'userDetailsS​​ervice'的类型[org.krams.tutorial.service.UserDetailsS​​erviceImpl]的值转换为所需类型[org.springframework.security.core.userdetails.UserDetailsS​​ervice]:没有匹配的编辑器或转换策略在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:281)上
找到
在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver。
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(AbstractAutowireCapableBeanF actory.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)
在org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)在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(AbstractApplicationCont ext.java:423)美元,org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:276 B $ B)
在org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4723)
。在org.apache.catalina.core.StandardContext $ 1.call(StandardContext.java:5226)$ b $在org.apache.catalina.core.StandardContext $ 1.call(StandardContext.java:5221)
b java.util.concurrent.FutureTask $ Sync.innerRun(FutureTask.java:303)$ java.util.concurrent.FutureTask.run上的$ b $(FutureTask.java:138)$ java.util.concurrent上的
.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)$ b $在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)$ b $在java.lang.Thread.run(线程.java:619)
导致:org.springframework.beans。 factory.BeanCreationException:创建名为'(内部bean)#8'的bean时出错:FactoryBean在创建对象时抛出异常;嵌套异常是org.springframework.beans.factory.BeanCreationException:使用名称'org.springframework.security.authenticationManager'创建bean时出错:设置时无法解析对bean'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0'的引用具有键[0]的bean属性提供者;嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建名为'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0'的bean时出错:bean初始化失败;嵌套异常是org.springframework.beans.ConversionNotSupportedException:无法类型的org.krams.tutorial.service.UserDetailsS​​erviceImpl属性值转换成所需类型org.springframework.security.core.userdetails.UserDetailsS​​ervice的属性的UserDetailsS​​ervice ;嵌套异常是java.lang.IllegalStateException:无法将属性'userDetailsS​​ervice'的类型[org.krams.tutorial.service.UserDetailsS​​erviceImpl]的值转换为所需类型[org.springframework.security.core.userdetails.UserDetailsS​​ervice]:没有匹配的编辑器或转换策略在org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:149)
找到org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport。
at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveInnerBean(BeanDefinitionValueResolver.java:274)
... 23 more
引起:org.springframework.beans .factory.BeanCreationException:使用名称'org.springframework.security.authenticationManager'创建bean时出错:无法解析对bean的引用org.springframework.security.authentication.dao.DaoAuthenticationPr ovider#0',同时用键[0]设置bean属性'providers';嵌套的异常是org.springframework.beans.factory.BeanCreationException:创建名为'org.springframework.security.authentication.dao.DaoAuthenticationProvider#0'的bean时出错:bean初始化失败;嵌套异常是org.springframework.beans.ConversionNotSupportedException:未能将类型'org.krams.tutorial.service.UserDetailsS​​erviceImpl'的属性值转换为属性'userDetailsS​​ervice'所需的类型'org.springframework.security.core.userdetails.UserDetailsS​​ervice' ;嵌套异常是java.lang.IllegalStateException:无法将属性'userDetailsS​​ervice'的类型[org.krams.tutorial.service.UserDetailsS​​erviceImpl]的值转换为所需类型[org.springframework.security.core.userdetails.UserDetailsS​​ervice]:没有匹配的编辑器或转换策略在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:328)中找到
$ or $。
在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver。
在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver。 java:153)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1
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(Auth (org.springframework.security.config.authentication.AuthenticationManagerFactoryBean.getObject(AuthenticationManagerFactoryBean.java:20)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean( FactoryBeanRegistrySupport.java:142)
... 25 more
导致:org.springframework.beans.factory.BeanCreationException:创建名为org.springframework.security.authentication.dao.DaoAuthenticationProvider的bean时出错# 0':bean初始化失败;嵌套异常是org.springframework.beans.ConversionNotSupportedException:未能将类型'org.krams.tutorial.service.UserDetailsS​​erviceImpl'的属性值转换为属性'userDetailsS​​ervice'所需的类型'org.springframework.security.core.userdetails.UserDetailsS​​ervice' ;嵌套异常是java.lang.IllegalStateException:无法将属性'userDetailsS​​ervice'的类型[org.krams.tutorial.service.UserDetailsS​​erviceImpl]的值转换为所需类型[org.springframework.security.core.userdetails.UserDetailsS​​ervice]:没有匹配的编辑器或转换策略在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)中找到
$ or $ $ $ b $ org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory。的java:456)
。在org.springframework.beans.factory.support.AbstractBeanFactory $ 1.getObject(AbstractBeanFactory.java:291)
。在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.Abstrac tBeanFactory.getBean(AbstractBeanFactory.java:190)
在org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:322)
... 39个
所致:org.springframework.beans.ConversionNotSupportedException:未能将'org.krams.tutorial.service.UserDetailsS​​erviceImpl'类型的属性值转换为属性'userDetailsS​​ervice'所需的类型'org.springframework.security.core.userdetails.UserDetailsS​​ervice';嵌套异常是java.lang.IllegalStateException:无法将属性'userDetailsS​​ervice'的类型[org.krams.tutorial.service.UserDetailsS​​erviceImpl]的值转换为所需类型[org.springframework.security.core.userdetails.UserDetailsS​​ervice]:没有匹配的编辑器or conversion strategy found org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:471)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1363)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1322)
在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1076)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
... 45 more
导致:java.lang.IllegalStateException:无法将[org.krams.tutorial.service.UserDetailsS​​erviceImpl]类型的值转换为属性'userDetailsS​​ervice'所需的类型[org.springframework.security.core.userdetails.UserDetailsS​​ervice] :没有匹配的编辑器或转换策略发现
。在org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:291)
。在org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:155 )美元,org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:461 b $ b)
... 49多个
2010年11月19日下午10时47分34秒org.apache.catalina .core.ApplicationContext log
INFO:关闭Spring根WebApplicationContext

以下是我的实现 p>

安全上下文文件

 <?xml version =1.0编码= UTF-8 >?; 
< beans xmlns =http://www.springframework.org/schema/beansxmlns:xsi =http://www.w3.org/2001/XMLSchema-instance
xmlns :security =http://www.springframework.org/schema/securityxsi: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 =trueuse-expressions =trueaccess-denied-page =/ krams
/ auth / denied>
< security:intercept-url pattern =/ krams / auth / loginaccess =permitAll/>
< security:intercept-url pattern =/ krams / main / adminaccess =hasRole('ROLE_ADMIN')/>
< security:intercept-url pattern =/ krams / main / commonaccess =hasRole('ROLE_USER')/>
< security:form-login login-page =/ krams / auth / loginauthentication-failure-url =/ krams / auth / login?error = true
default-target-url =/ krams / main / common/>
< security:logout invalidate-session =truelogout-success-url =/ krams / auth / loginlogout-url =/ krams / auth / logout/>
< / security:http>

< bean id =userDetailsS​​erviceclass =org.krams.tutorial.service.UserDetailsS​​erviceImpl>< / bean>

< bean id =daoAuthenticationProvider
class =org.springframework.security.authentication.dao.DaoAuthenticationProvider>
< property name =userDetailsS​​erviceref =userDetailsS​​ervice/>
< / bean>

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

< security:authentication-manager>
< security:authentication-provider user-service-ref =userDetailsS​​ervice>< / security:authentication-provider>
< / security:authentication-manager>
< / beans>

我有2个域类人员和安全角色
人员有用户名和密码以及安全性角色具有身份验证角色。

  import javax.persistence.NoResultException; 
导入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.UserDetailsS​​ervice;
import org.springframework.security.userdetails.UsernameNotFoundException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;



@Service( UserDetailsS​​ervice的)
公共类UserDetailsS​​erviceImpl实现的UserDetailsS​​ervice {

@Autowired
私人PersonServiceImpl personService ;

@Autowired
私有汇编器汇编器;

@Transactional(唯读=真)
@覆盖
公众的UserDetails loadUserByUsername(字符串用户名)
抛出UsernameNotFoundException,DataAccessException的{
尝试{
Person person = personService.findByName(username);
return(UserDetails)assembler.buildUserFromUserEntity(person);
} catch(NoResultException e){
throw new UsernameNotFoundException(e.getLocalizedMessage());





@Service(汇编器)
公共类汇编程序{
@Transactional(readOnly = true)
用户buildUserFromUserEntity(Person person){

字符串用户名= person.getUserName();
String password = person.getPassword();
boolean enabled = person.getEnabled();
boolean accountNonExpired = person.getEnabled();
布尔credentialsNonExpired = person.getEnabled();
boolean accountNonLocked = person.getEnabled();

收藏<授权授权> authority = new ArrayList< GrantedAuthority>(); (SecurityRole角色:person.getSecurityRoleSet()){
authorities.add(new GrantedAuthorityImpl(role.getSecurityRole()))的
;
}

用户用户=新用户(用户名,密码,启用,
accountNonExpired,credentialsNonExpired,accountNonLocked,权限);
返回用户;
}


}

伙计们请帮忙我,它的优先权一种情况。



预先致谢。

解决方案

您没有实现正确的 UserDetailsS​​ervice



org.springframework.security。需要a: org.springframework.security.core.userdetails.UserDetailsS​​ervice / code>,但是您实现了
org.springframework.security.userdetails.UserDetailsS​​ervice



对我来说,看起来你正在混合弹簧安全2.0和3.0。



  • org.springframework.security.core.userdetails.UserDetailsS​​ervice 是Spring 3.0

  • org.springframework.security.userdetails.UserDetailsS​​ervice 是Spring 2.0



有关快速浏览2.0和3.0在包结构方面的不同之处,请看这篇博文: http://blog.springsource.com/2009/06/03/spring-security-300m1-released/ ,有一节描述包名称已更改。


I followed the thread in stack overflow to implemt this, but i am getting some error while i use that solution in my code.

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

following is my implementation

Security-context file

<?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>

I have 2 domain class person and security roles person has user name and password and security role has authentication roles.

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;
}


}

Guys please help me, its Priority one situation.

Thanks in advance.

解决方案

You did not implement the correct UserDetailsService!

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

requires a: org.springframework.security.core.userdetails.UserDetailsService, but you implemented: org.springframework.security.userdetails.UserDetailsService!

For me it looks like you are mixing spring security 2.0 and 3.0.

  • org.springframework.security.core.userdetails.UserDetailsService is Spring 3.0
  • org.springframework.security.userdetails.UserDetailsService is Spring 2.0

For one quick overview how 2.0 and 3.0 differs in there package structure have a look at this blog post: http://blog.springsource.com/2009/06/03/spring-security-300m1-released/ , there is a section description how the package names are changed.

这篇关于Spring安全数据库实现异常的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆