passwordEncoder must be a PasswordEncoder instance


Spring4+SpringMVC4+Hibernate4集成Spring Security问题


异常:passwordEncoder must be a PasswordEncoder instance


对与Srping Security的问题,网上能查到的不多,许多东西也是东凑西凑再加上自己查文档并实践和尝试,问题才能得到解决。


报错信息:

Caused by: org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'passwordEncoder' threw exception; nested exception is java.lang.IllegalArgumentException: passwordEncoder must be a PasswordEncoder instance
	at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:121)
	at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:75)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1514)
	... 97 more



报错说的很明显,缺少了Spring Security的密码编码器实例。

原因:applicationContext-security.xml文件中的Base64PasswordEncoder没有实现Spring Security的PasswordEncoder(目前版本4.x,导入的包是org.springframework.security.crypto.password.PasswordEncoder)接口。


<!-- 认证配置, 使用userDetailsService提供的用户信息 -->
	<s:authentication-manager alias="authenticationManager">
		<s:authentication-provider user-service-ref="userDetailsService">
			<s:password-encoder ref="base64PasswordEncoder" />
		</s:authentication-provider>
	</s:authentication-manager>

	<!-- 项目实现的用户查询服务 -->
	<bean id="userDetailsService"
		class="com.ywx.tiles.account.service.impl.UserDetailsServiceImpl" />
	<!-- 密码加密 -->
	<bean id="base64PasswordEncoder" class="com.ywx.tiles.account.service.impl.Base64PasswordEncoder" />

实现 PasswordEncoder接口并覆写encode和matches方法,密码的加密在encode方法中实现,matches方法是匹配账号是否正确。


Spring-security配置文件中的配置,UserDetailsServiceImpl 也需要实现Srping Security的UserDetailsService接口,并覆写loadUserByUsername方法,并且需要返回一个实例对象,否则也会报如下信息:

Caused by: java.lang.IllegalStateException: Cannot convert value of type [com.ywx.tiles.account.service.impl.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:302)
	at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576)
	... 101 more



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值