Tomcat 7 中的 JDBC Realm 配置
2015-10-20 14:04
435 查看
Tomcat 7 作为一个 Container,支持灵活的认证配置方式。
这块提供用户信息的数据源称为 Realm。
如果我们自行管理,可以使用 JDBCRealm, 即把用户信息放在外部数据库中的方式。
首先你需要在 Tomcat 的 conf/server.xml 中配置 Realm。
原来的 Realm 有可能是在 LockOutRealm 里面的,没有关系,把那一段注释掉即可。
这里的数据表配置很有讲究。
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
认证配置 | 说明 |
---|---|
UserDatabase | 基于服务器本地文件 tomcat-users.xml |
JDBCRealm | 基于外部数据库 |
JNDIRealm | 基于外部数据源,如 LDAP |
如果我们自行管理,可以使用 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
相关文章推荐
- java-模拟tomcat服务器
- i-jetty环境搭配与编译
- 实现单Tomcat多Server配置
- 生产环境下的Tomcat配置
- Linux部署Tomcat服务器
- jenkins------结合maven将svn项目自动部署到tomcat下
- 如何搞定tomcat这只喵~
- tomcat在opensuse下开机自启失败的原因分析及解决方法
- jsp项目中更改tomcat的默认index.jsp访问路径的方法
- Tomcat 多端口 多应用
- tomcat 5.0 + apache 2.0 完全安装步骤详解
- Tomcat安全设置 win2003 下tomcat权限限制
- Jsp和PHP共用80端口整合Apache和Tomcat(访问时无需加端口号)
- Tomcat服务器 安全设置第1/3页
- tomcat 6.0.20在一个机器上安装多个服务的方法
- Tomcat 5.5 数据库连接池配置
- Tomcat内存溢出分析及解决方法
- apache tomcat 一个网站多域名的实现方法
- Tomcat无法加载css和js等静态资源文件的解决思路