Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

应用TOMCAT基于JDBC的的Realm(1)

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]
应用TOMCAT基于JDBC的的Realm (1)

作(译)者:Lanf From LinuxAID

Realm是一个用户数据库的概念,类似于Unix中的用户群组, 它通过用户名和密码来标识一个用户,这个用户属于一定的角色(role)。 而一个特殊的web应用资源,可以限定某个角色的用户才被许可访问。这种 许可策略,使得web应用的整体权限控制与应用细节相剥离,从而获得更好 的可配置性。下面我们通过比较常见的基于数据库,使用直接JDBC连接的Realm的配置 使用情况,看看它是如何实现粗粒度的ACL的。

JDBCRealm

JDBCRealm是使用JDBC连接关系数据库的一个Tomcat 4 Realm接口的实现。 它可以直接使用你现有的用户数据库表,来获取角色用户的信息,完成验证。你必须 满足以下条件:

  • 必须有个有效的数据表,里面有所有你需要通过Realm来认证的用户。这张表必须 至少有两个字段,可以用来标示用户名和密码。
  • 需要有一张表来标明用户与角色的对应关系,用户可以有任意个角色,没有角色也 是合法的,这是和UNIX用户群组的不同之处。同样这个表也需要两个字段,来映射用户 名与角色名的对应关系。

数据库准备

在我们的例子中,我们建两张新表来处理realm的认证。


create table users (
  user_name         varchar(15) not null primary key,
  user_pass         varchar(15) not null
);

create table user_roles (
  user_name         varchar(15) not null,
  role_name         varchar(15) not null,
  primary key (user_name, role_name)
); 

JDBC驱动

你需要将你的JDBC启动包放在 $CATALINA_HOME/server/lib 目录或者 $CATALINA_HOME/common/lib 目录下,确保Tomcat能通过CLASSPATH找到它。使用mysql数据库的话,你可以使用类似 mm.mysql-2.0.4-bin.jar 的驱动包;Oracle 9i你可以使用ojdbc14.jar等Oracle自带的驱动;PostgreSQL可以在http://jdbc.postgresql.org/ 取得合适的驱动程序。

编辑server.xml

编辑$CATALINA_HOME/conf/server.xml文件,在host里添加如下片段(以MySQL为例)


 <Realm className = 'org.apache.catalina.realm.JDBCRealm' debug='0'
      driverName = 'org.gjt.mm.mysql.Driver'
connectionURL = 'jdbc:mysql://localhost/authority?user=dbuser&password=dbpass'
       userTable='users' userNameCol='user_name' userCredCol='user_pass'
   userRoleTable='user_roles' roleNameCol='role_name'/>

其中 jdbc:mysql://localhost/authority?user=dbuser&password=dbpass 是Mysql的连接串,你可以根据 你的需要进行修改。其有关属性介绍如下:

属性描述
className

Realm的实现类,这里必须是 'org.apache.catalina.realm.JDBCRealm'

connectionName

数据库用户名

connectionPassword

数据库用户的密码

connectionURL

数据库的JDBC连接串

debug

Debug的程度,它和Logger相关配置配合使用,值越高信息越详细,缺省为0

digest

存储密码的加密方式,如果不指定则是明文存储。指定为 java.security.MessageDigest 之类的类名则要看数据库里表中用户密码的存放格式。

driverName

数据库驱动程序类

roleNameCol

角色表的存放角色名的字段名.

userCredCol

用户表里存放密码的字段名

userNameCol

用户表中存放用户名的字段名

userRoleTable

角色表的表名(类似/etc/group)

userTable

用户表的表名

注意点

更多相关文章
Power by linux-cn.com 粤ICP备05006655号