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。
分享到:
相关推荐
### Spring Security 2.0.x完全中文参考文档 #### 序言 本文档旨在为用户提供一份详尽且全面的Spring Security 2.0.x版本的中文指南,它不仅覆盖了核心概念、配置方法以及实际应用案例,还深入探讨了安全框架的...
Spring Security 2.0 提供了基础的认证和授权功能,而3.0进一步强化了模块化设计。这使得开发者可以根据项目需求选择合适的组件,如Web安全模块、方法安全模块和密码存储模块等。 2. **表达式式访问控制...
除此之外,Spring还包含其他模块,如Spring Batch用于批量处理任务,Spring Integration用于企业集成,Spring Security提供认证和授权功能,Spring AMQP支持消息队列,以及Spring Boot简化微服务开发等。所有这些...
10. **Spring Security**:原名Acegi Security,提供了全面的安全管理框架,支持认证、授权、会话管理等功能,适用于Web和企业级应用。 11. **Spring Test**:提供了一套测试工具,支持单元测试和集成测试,可以...
《Spring 2.0 中文用户指南》是针对Spring框架2.0版本的一份详尽指导文档,旨在帮助开发者深入理解和高效使用这个流行的Java企业级应用框架。Spring框架以其依赖注入(Dependency Injection,DI)和面向切面编程...
- **完整文档**:提供了详尽的参考文档、JavaDoc文档以及相关的书籍资源。 #### 六、支持的应用类型 Acegi安全框架可以应用于各种类型的应用程序,包括但不限于: - **自包含部署包**:如WAR、JAR或EAR文件。 - **...
4. **java**: 此目录可能包含SpringBoot应用的后端代码,如控制器、服务层、数据访问对象(DAO)以及配置文件。SpringBoot的主要代码应该在这里。 5. **docs**: 这可能是项目文档的存放位置,包括API参考、设计文档...
在蓝缘系统中,MyBatis 3.x与Spring的集成使得数据库操作更加简便,通过XML或注解的方式定义SQL语句,可以直接映射到Java对象,减少了手写DAO层的繁琐工作。同时,MyBatis支持动态SQL,可以根据条件灵活构建查询,极...
此外,Spring Security(前身是Acegi Security)可以进一步加强安全性,提供角色授权、访问控制等功能。 Struts 2.3 是一个基于MVC设计模式的Java Web框架,用于构建可维护性和可扩展性高的应用。在登录验证场景中...