您的位置:首页 > 运维架构 > Tomcat

Tomcat 7 中的 JDBC Realm 配置

2015-10-20 14:04 435 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tomcat