4000-520-616
欢迎来到免疫在线!(蚂蚁淘生物旗下平台)  请登录 |  免费注册 |  询价篮
主营:原厂直采,平行进口,授权代理(蚂蚁淘为您服务)
咨询热线电话
4000-520-616
当前位置: 首页 > 新闻动态 >
热卖商品
新闻详情
菜鸟-手把手教你把Acegi应用到实际项目中(6) - 微信公众号:二进制...
来自 : zhanjia.iteye.com/blog/258... 发布时间:2021-03-25

       

在企业应用中,用户的用户名、密码和角色等信息一般存放在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\" property name=\"userDetailsService\" ref=\"jdbcDaoImpl\" /  /bean  bean id=\"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);

添加数据:
INSERT INTO TEXT VALUES(1,\'chenlb\')
INSERT INTO TEXT VALUES(2,\'Tenny\')

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-28public 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();

 

 

 

本节中用到的数据库脚本:
CREATE SCHEMA PUBLIC AUTHORIZATION DBA
CREATE MEMORY TABLE USERS(USERNAME VARCHAR_IGNORECASE(50) NOT NULL PRIMARY KEY,PASSWORD VARCHAR_IGNORECASE(50) NOT NULL,ENABLED BOOLEAN NOT NULL)
CREATE MEMORY TABLE AUTHORITIES(USERNAME VARCHAR_IGNORECASE(50) NOT NULL,AUTHORITY VARCHAR_IGNORECASE(50) NOT NULL,CONSTRAINT FK_AUTHORITIES_USERS FOREIGN KEY(USERNAME) REFERENCES USERS(USERNAME))
CREATE USER SA PASSWORD \"\"
GRANT DBA TO SA
SET WRITE_DELAY 20
SET SCHEMA PUBLIC
INSERT INTO USERS VALUES(\'javaee\',\'password\',TRUE)
INSERT INTO USERS VALUES(\'qiuzj\',\'password\',FALSE)
INSERT INTO USERS VALUES(\'sam\',\'password\',TRUE)
INSERT INTO AUTHORITIES VALUES(\'javaee\',\'ROLE_SUPERVISOR\')
INSERT INTO AUTHORITIES VALUES(\'sam\',\'ROLE_USER\')
INSERT INTO AUTHORITIES VALUES(\'qiuzj\',\'ROLE_SUPERVISOR\')

 

数据源配置:

 beans  bean id=\"dataSource\" 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目录下。
启动hsqldb数据库只须在rdbms目录下运行server.bat文件,内容为:
      \"%JAVA_HOME%/bin/java\" -classpath ..\\WEB-INF\\lib\\hsqldb.jar org.hsqldb.Server -database acegidb
      进入hsqldb客户端管理工具请运行manager.bat文件,内容为:
      \"%JAVA_HOME%/bin/java\" -classpath ..\\WEB-INF\\lib\\hsqldb.jar org.hsqldb.util.DatabaseManager
      实际调试我们可以根据实际情况进行修改。

3、自定义SQL语句
      在开发实际企业应用期间,用户信息的获取方式往往是千差万别的,所以可能不存在users、authorities表和相应名字的属性。考虑到这方面的需求,Acegi的JdbcDaoImpl为我们暴露了usersByUsernameQuery和authoritiesByUsernameQuery属性,它们分别用于自定义SQL语句,获取系统用户和授权信息。
      此时jdbcDaoImpl配置如:

 bean id=\"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、说明
开发环境:
MyEclipse 5.0GA
Eclipse3.2.1
JDK1.5.0_10
tomcat5.5.23
acegi-security-1.0.7
Spring2.0


Jar包:
acegi-security-1.0.7.jar
Spring.jar(2.0.8)
commons-codec.jar
jstl.jar (1.1)
standard.jar
commons-logging.jar(1.0)
hsqldb.jar(1.8.0.10)

 

 

 

 

 

 

本文链接: http://acegi0.immuno-online.com/view-724522.html

发布于 : 2021-03-25 阅读(0)
公司介绍
品牌分类
联络我们
服务热线:4000-520-616
(限工作日9:00-18:00)
QQ :1570468124
手机:18915418616