精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-26
在企业应用中,用户的用户名、密码和角色等信息一般存放在RDBMS(关系数据库)中。前面几节我们采用的是InMemoryDaoImpl,即基于内存的存放方式。这节我们将采用RDBMS存储用户信息。
UserDetailsService的接口实现有JdbcDaoImpl和InMemoryDaoImpl。JdbcDaoImpl通过数据库获取用户名、密码和角色信息,它将是接下来的重点内容。
1、简单JdbcDaoImpl配置 默认时, JdbcDaoImpl会采用如下SQL获得用户名、密码、启用状态: SELECT username, password, enabled From users WHERE username=? 类似地, JdbcDaoImpl会采用如下SQL获得用户的授权信息(角色集合): SELECT username, authority FROM authorities WHERE username=?
所以, 只要数据库中有这两个表和相应字段, 那么只需这样配置:
<bean id="daoAuthenticationProvider"
class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="jdbcDaoImpl" />
...
</bean>
<bean id="jdbcDaoImpl"
class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
在这里,我们只需提供dataSource(数据源)的配置信息,并将dataSource注入到JdbcDaoImpl中。
2、Hsqldb使用配置 Hsqldb 是一个优秀的轻量级开源的纯Java SQL 数据库,大家可以从Hsqldb 官方网站(http://hsqldb.org)获取到Hsqldb 的发布包、源代码和文档。
转自他人的简单使用教程: 初用 hsqldb 今天初了下 hsqldb
下载 hsqldb http://sourceforge.net/project/showfiles.php?group_id=23316
下载 hsqldb_1_8_0_7.zip
解压到 D:/hsqldb
在 D:/hsqldb 目录下创建 runxdb.bat 文件如下: cd data java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 xdb -dbname.0 xdb
然后双击 runxdb.bat 启动 hsqldb Server
到目录 demo 下运行 runManagerSwing.bat 来创建表 type : HSQL Database Engine Server url : jdbc:hsqldb:hsql://localhost/xdb user : SA
建表: CREATE MEMORY TABLE TEXT(ID INTEGER GENERATED BY DEFAULT AS IDENTITY(START WITH 1) NOT NULL PRIMARY KEY,NAME VARCHAR); 添加数据: Java 文件
package hsqldb; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * * @author chenlb 2007-4-28 * */ public class HsqldbFirstSimple { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub try { Class.forName("org.hsqldb.jdbcDriver" ); } catch (Exception e) { System.out.println("ERROR: failed to load HSQLDB JDBC driver."); e.printStackTrace(); return; } try { Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb", "sa", ""); Statement stmt = c.createStatement(); ResultSet rs = stmt.executeQuery("select * from text"); while(rs.next()) { System.out.println(rs.getString(1)+"\t"+rs.getString(2)); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
本节中用到的数据库脚本:
数据源配置:
<beans> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>org.hsqldb.jdbcDriver</value> </property> <property name="url"> <value>jdbc:hsqldb:hsql://localhost/</value> </property> <property name="username"> <value>sa</value> </property> <property name="password"> <value></value> </property> </bean> </beans>
在源代码中,我提供了相应脚本,存放在Acegi5\WebRoot\rdbms目录下。 3、自定义SQL语句 <bean id="jdbcDaoImpl" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl"> <property name="dataSource"> <ref bean="dataSource" /> </property> <property name="usersByUsernameQuery"> <value> SELECT username, password, enabled From users WHERE username=? </value> </property> <property name="authoritiesByUsernameQuery"> <value> SELECT username, authority FROM authorities WHERE username=? </value> </property> </bean>
4、说明
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
浏览 2401 次