Tomcat 7 中的 JDBC Realm 配置

来源:互联网 发布:电脑设计软件培训 编辑:程序博客网 时间:2024/05/17 15:40

Tomcat 7 作为一个 Container,支持灵活的认证配置方式。

认证配置 说明 UserDatabase 基于服务器本地文件 tomcat-users.xml JDBCRealm 基于外部数据库 JNDIRealm 基于外部数据源,如 LDAP


这块提供用户信息的数据源称为 Realm。
如果我们自行管理,可以使用 JDBCRealm, 即把用户信息放在外部数据库中的方式。

首先你需要在 Tomcat 的 conf/server.xml 中配置 Realm。

把原来的 Realm 注释掉

Tomcat 缺省使用 UserDatabase Realm,即基于本地 tomcat-users.xml 的信息。
原来的 Realm 有可能是在 LockOutRealm 里面的,没有关系,把那一段注释掉即可。

设备用户数据表

Tomcat 对 JDBCRealm 数据表是有要求的。

表 说明 必要性 用户表 至少要有两列,一列是用户名,一列是密码。
强烈建议以用户名为主键,并以 MD5 等 Hash 方式保存密码 必须 角色表 至少应用一列是角色名。
强烈建议以角色名为主键 可选 用户-角色表 这实际上是一个关联表。
建议以用户-角色为主键,通过外键约束到用户表和角色表。
必有一列是用户名,另一列是角色名,用户名的列名要与用户表中的列名一致 必须


注意:不建议用自动生成的数字 ID 作为用户表或角色表的主键!

配置新的 Realm

按以下内容配置新的 Realm

   <Realm className="org.apache.catalina.realm.JDBCRealm"          driverName="com.mysql.jdbc.Driver"          connectionURL="jdbc:mysql://localhost/tomcat_realm"          connectionName="database_user"          connectionPassword="database_user_pass"          digest="MD5"          userTable="usr"          userNameCol="usr_name"          userCredCol="passwd_md5"          userRoleTable="usr_grp"          roleNameCol="grp_name"/>

这里的数据表配置很有讲究。

  • tomcat_realm 是保存用户数据库的名字
  • digest=”MD5” 表明我们不保存用户的密码,我们只保存 MD5 的 Hash,这样安全性相对好些
  • userTable 是保存用户信息的表,它必须有两列,一列指定 username 另一列指定 password
  • userNameCol/CredCol 是表中用户名和密码的列
  • userRoleTable 是一个 JoinTable,但它不建议使用数字 id 作为键来关联。它建议直接用 username 和 rolename 作为主键,来进行关联。

强调一下:
userRoleTable 中的“用户名”列,其列名必须与 userTable 中的“用户名”列的列名一致!
比如,都叫 “usr_name”

userRoleTable 中的“用户名”列,其列名必须与 userTable 中的“用户名”列的列名一致!
比如,都叫 “usr_name”

userRoleTable 中的“用户名”列,其列名必须与 userTable 中的“用户名”列的列名一致!
比如,都叫 “usr_name”

重要的事情说三遍。

详细的说明见:
https://tomcat.apache.org/tomcat-7.0-doc/realm-howto.html

0 0
原创粉丝点击