acegi security实践教程—把用户信息存放到数据库
概括:
前几篇博客中form验证中用户名称、密码都是存在内存中,为了进一步完善,我们把用户基本信息存放到数据库中。
基于内存形式如下:
<!-- 从数据库中读取用户信息验证身份 -->
<bean id ="daoAuthenticationProvider"
class= "org.acegisecurity.providers.dao.DaoAuthenticationProvider" >
<property name ="userDetailsService" ref= "inMemDaoImpl" />
</bean >
<!-- 基于内存实现方式-->
<bean id ="inMemDaoImpl"
class= "org.acegisecurity.userdetails.memory.InMemoryDaoImpl" >
<property name ="userMap">
<value >
test=1,ROLE_USER
lisi=1,ROLE_SUPERVISOR
zhangsan=1,ROLE_SUPERVISOR,disabled
</value >
</property >
</bean >
分析:
根据源码,我们分析到userDetailService的实现类有两个:InMemoryDaoImpl和JdbcDaoImpl,那这篇博客就尝试用JdbcDaoImpl类。
具体开发步骤:
开发环境:MyEclispe10.7.1+tomcat6.0.37+acegi1.0.5+spring2.0
项目目录如下: 其中readme主要用来记录本次验证目的
讲解:
1.根据JdbcDaoImpl源码来配置acegi
通过源码发现,JdbcDaoImpl默认情况下,执行这两个查询。
usersByUsernameQuery 根据用户名查询用户基本信息:用户名、密码、是否启用
this.usersByUsernameQuery = "SELECT username,password,enabled FROM users WHERE username = ?";
authoritiesByUsernameQuery根据用户名查询用户权限信息:用户名、角色权限
this.authoritiesByUsernameQuery = "SELECT username,authority FROM authorities WHERE username = ?";
所以,您的数据库中必须有这两个表以及相应的字段。
2.JdbcDaoImpl继承了spring的JdbcDaoSupport类,其中spring的JdbcDaoSuupport类如下:
分析注入dataSource数据源:
通过springJdbcDaoSupport类,是需要注入一个数据源对象。具体了解一下,从源码哪里可以看出需要注入数据源呢,spring的注入配置,主要观察类代码。
免责声明: 本文仅代表作者个人观点,与爱易网无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。