(翻译)Spring Security-2.0.x参考文档“DAO认证提供器”

DAO认证提供器
9.1. 综述

Spring Security包含了一个产品级别的AuthenticationProvider实现,叫做DaoAuthenticationProvider。 这个认证提供器兼容所有生成UsernamePasswordAuthenticationToken的验证机制,它可能是框架里最常用到的提供器。 与其他认证提供器一样,DaoAuthenticationProvider通过一个UserDetailsService来获得用户名,密码和GrantedAuthority[]。 与其他认证提供器不同的是,这个认证提供器需要获得一个密码,它会根据认证请求对象里的密码来判断认证是否成功。
9.2. 配置

你需要把DaoAuthenticationProvider加入你的ProviderManager列表(如我们在参考指南这章开始讲到的),并确保合适的认证机制配置为UsernamePasswordAuthenticationToken,其他对提供器自己的配置基本和下面一样简单:


<bean id="daoAuthenticationProvider"
class="org.springframework.security.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="inMemoryDaoImpl"/>
<property name="saltSource" ref bean="saltSource"/>
<property name="passwordEncoder" ref="passwordEncoder"/>
</bean>


PasswordEncoder和SaltSource是可选的。 PasswordEncoder为从配置好的UserDetailsService中返回的UserDetails对象里的密码,提供编码和反编码的功能。 SaltSource使用盐值生成密码,这可以提升认证资源密码的安全性。 Spring Security支持MD5,SHA和纯文本编码的PasswordEncoder实现。 Spring Security提供了两种SaltSource实现:SystemWideSaltSource对所有密码都使用相同的盐值进行编码,ReflectionSaltSource,使用返回的UserDetails对象的属性来获得盐值。 请参考JavaDocs获得这些选项的更多信息。

除了上述的属性,DaoAuthenticationProvider还可以为UserDetails对象提供缓存。 UserCache接口可以让DaoAuthenticationProvider把一个UserDetails对象放到缓存里,在以后的认证进程中,如果需要同样的用户名就会重新获得它。 默认情况下,DaoAuthenticationProvider使用NullUserCache,这意味着不使用缓存。 Spring Security也提供了一个可用的缓存实现,EhCacheBasedUserCache,如下配置:

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

<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:/ehcache-failsafe.xml"/>
</bean>

<bean id="userCacheBackend" class="org.springframework.cache.ehcache.EhCacheFactoryBean">
<property name="cacheManager" ref="cacheManager"/>
<property name="cacheName" value="userCache"/>
</bean>

<bean id="userCache" class="org.springframework.security.providers.dao.cache.EhCacheBasedUserCache">
<property name="cache" ref="userCacheBackend"/>
</bean>


所有Spring Security的EH-CACHE实现(包括EhCacheBasedUserCache)要求一个EH-CACHE的Cache对象。 这个Cache对象可以从任何地方获得,不过我们推荐你使用Spring的工厂类,请参考Spring文档获得更多的细节,如何优化缓存存储位置,内存使用,剔除策略,超时等。
Note

大部分情况,你的程序都是有状态的web应用程序,你不需要使用缓存,因为用户的认证信息会被保存在HttpSession里。

我们在设计的时候,决定不支持为DaoAuthenticationProvider加锁,因为这样会加大UserDetailsService接口的复杂度。 比如,一个方法可能需要在认证请求失败的时候进行累加计数。 这些功能都可以利用下面讨论到的应用程序事件发布功能,来轻松实现。

DaoAuthenticationProvider返回一个Authentication对象,包含有principal属性集合。 它的内容可能是String(基本就是用户名)或者是UserDetails对象(是从UserDetailsService获得的)。 默认返回的是UserDetails,它允许添加系统特定的潜在属性,比如用户的全名,邮件地址等。 如果使用容器适配器,或者如果你的程序就是要操作String(就像之前在Spring Security 0.6里发布的情况一样),你应该把你程序里的DaoAuthenticationProvider.forcePrincipalAsString属性设置成true。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值