1. 首页 > Tomcat教程 > 正文

Tomcat教程FG008-Tomcat Realms配置与容器化安全管控实战

目录大纲

Part01-基础概念与理论知识

1.1 Realms简介

Realms是Tomcat中用于存储用户、密码和角色信息的组件。它为Tomcat提供了认证和授权功能,是Tomcat安全体系的核心组成部分。

Realms的主要功能:

  • 存储用户信息(用户名、密码)
  • 存储角色信息
  • 提供认证功能(验证用户身份)
  • 提供授权功能(验证用户权限)

1.2 Realms类型

Tomcat支持多种类型的Realms:

  • MemoryRealm:基于内存的Realms,用户信息存储在内存中
  • JDBCRealm:基于数据库的Realms,用户信息存储在数据库中
  • DataSourceRealm:基于数据源的Realms,使用数据源连接数据库
  • JNDIRealm:基于JNDI的Realms,使用LDAP等目录服务
  • UserDatabaseRealm:基于XML文件的Realms,用户信息存储在XML文件中
  • CombinedRealm:组合多个Realms

1.3 容器化安全管控原理

容器化安全管控的原理:

  • 通过web.xml配置安全约束
  • 使用Realms进行用户认证
  • 基于角色的访问控制
  • 支持多种认证方式(BASIC、DIGEST、FORM、CLIENT-CERT)
  • 集成外部认证系统

更多视频教程www.fgedu.net.cn

Part02-生产环境规划与建议

2.1 环境准备

环境准备要求:

  • Tomcat 11.0.8或更高版本
  • 数据库(使用JDBCRealm或DataSourceRealm时需要)
  • LDAP服务器(使用JNDIRealm时需要)
  • 适当的用户和权限配置

2.2 配置建议

Realms配置建议:

  • 生产环境推荐使用JDBCRealm或DataSourceRealm
  • 使用加密存储密码
  • 配置适当的连接池
  • 定期备份用户数据
  • 监控认证失败情况

2.3 安全设置

安全设置建议:

  • 使用强密码策略
  • 启用HTTPS
  • 限制认证尝试次数
  • 配置适当的会话超时
  • 定期更新密码

学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 Realms配置

# 编辑server.xml文件,配置Realms
vi /Tomcat/app/conf/server.xml


pathname=”conf/tomcat-users.xml” />



driverName=”com.mysql.cj.jdbc.Driver”
connectionURL=”jdbc:mysql://localhost:3306/fgedudb”
connectionName=”fgedu”
connectionPassword=”fgedu123″
userTable=”users”
userNameCol=”username”
userCredCol=”password”
userRoleTable=”user_roles”
roleNameCol=”role” />

3.2 安全约束配置

# 编辑web.xml文件,配置安全约束
vi /Tomcat/app/webapps/fgedu-webapp/WEB-INF/web.xml


Protected Area
/secure/*


admin
user


CONFIDENTIAL




FORM

/login.html
/error.html




admin


user

3.3 角色与权限管理

角色与权限管理建议:

  • 根据业务需求定义角色
  • 遵循最小权限原则
  • 定期审核角色权限
  • 使用角色继承简化管理
  • 配置适当的访问控制规则

from Tomcat视频:www.itpux.com

Part04-生产案例与实战讲解

4.1 MemoryRealm配置实战

# 编辑tomcat-users.xml文件,添加用户和角色
vi /Tomcat/app/conf/tomcat-users.xml


xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”
xsi:schemaLocation=”http://tomcat.apache.org/xml tomcat-users.xsd”
version=”1.0″>>




# 重启Tomcat服务
/Tomcat/app/bin/shutdown.sh && /Tomcat/app/bin/startup.sh
Using CATALINA_BASE: /Tomcat/app
Using CATALINA_HOME: /Tomcat/app
Using CATALINA_TMPDIR: /Tomcat/app/temp
Using JRE_HOME: /usr/lib/jvm/java-17-openjdk
Using CLASSPATH: /Tomcat/app/bin/bootstrap.jar:/Tomcat/app/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.

4.2 JDBCRealm配置实战

# 创建数据库表
mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 123
Server version: 8.0.33 MySQL Community Server – GPL

mysql> CREATE DATABASE fgedudb;
Query OK, 1 row affected (0.01 sec)

mysql> USE fgedudb;
Database changed

mysql> CREATE TABLE users (
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(50) UNIQUE NOT NULL,
-> password VARCHAR(100) NOT NULL
-> );
Query OK, 0 rows affected (0.02 sec)

mysql> CREATE TABLE user_roles (
-> id INT PRIMARY KEY AUTO_INCREMENT,
-> username VARCHAR(50) NOT NULL,
-> role VARCHAR(50) NOT NULL,
-> FOREIGN KEY (username) REFERENCES users(username)
-> );
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO users (username, password) VALUES (‘fgeduadmin’, ‘fgeduadmin123’), (‘fgeduuser’, ‘fgeduuser123’);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> INSERT INTO user_roles (username, role) VALUES (‘fgeduadmin’, ‘admin’), (‘fgeduuser’, ‘user’);
Query OK, 2 rows affected (0.01 sec)
Records: 2 Duplicates: 0 Warnings: 0

mysql> GRANT ALL PRIVILEGES ON fgedudb.* TO ‘fgedu’@’localhost’ IDENTIFIED BY ‘fgedu123’;
Query OK, 0 rows affected (0.01 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye

# 下载MySQL驱动
wget https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz
–2026-04-10 11:30:00– https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz
Resolving dev.mysql.com (dev.mysql.com)… 137.254.60.11
Connecting to dev.mysql.com (dev.mysql.com)|137.254.60.11|:443… connected.
HTTP request sent, awaiting response… 302 Found
Location: https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz [following]
–2026-04-10 11:30:01– https://cdn.mysql.com//Downloads/Connector-J/mysql-connector-j-8.0.33.tar.gz
Resolving cdn.mysql.com (cdn.mysql.com)… 23.213.161.175
Connecting to cdn.mysql.com (cdn.mysql.com)|23.213.161.175|:443… connected.
HTTP request sent, awaiting response… 200 OK
Length: 24736432 (24M) [application/x-gzip]
Saving to: ‘mysql-connector-j-8.0.33.tar.gz’

mysql-connector-j-8.0.33.tar.gz 100%[====================================>] 23.60M 10.2MB/s in 2.3s

2026-04-10 11:30:04 (10.2 MB/s) – ‘mysql-connector-j-8.0.33.tar.gz’ saved [24736432/24736432]

# 解压并复制驱动到Tomcat lib目录
tar -zxvf mysql-connector-j-8.0.33.tar.gz
mysql-connector-j-8.0.33/
mysql-connector-j-8.0.33/LICENSE
mysql-connector-j-8.0.33/README.txt
mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar
mysql-connector-j-8.0.33/docs/

cp mysql-connector-j-8.0.33/mysql-connector-j-8.0.33.jar /Tomcat/app/lib/

# 编辑server.xml文件,配置JDBCRealm
vi /Tomcat/app/conf/server.xml

driverName=”com.mysql.cj.jdbc.Driver”
connectionURL=”jdbc:mysql://localhost:3306/fgedudb?useSSL=false&serverTimezone=UTC”
connectionName=”fgedu”
connectionPassword=”fgedu123″
userTable=”users”
userNameCol=”username”
userCredCol=”password”
userRoleTable=”user_roles”
roleNameCol=”role” />

# 重启Tomcat服务
/Tomcat/app/bin/shutdown.sh && /Tomcat/app/bin/startup.sh
Using CATALINA_BASE: /Tomcat/app
Using CATALINA_HOME: /Tomcat/app
Using CATALINA_TMPDIR: /Tomcat/app/temp
Using JRE_HOME: /usr/lib/jvm/java-17-openjdk
Using CLASSPATH: /Tomcat/app/bin/bootstrap.jar:/Tomcat/app/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.

4.3 DataSourceRealm配置实战

# 编辑server.xml文件,配置DataSource
vi /Tomcat/app/conf/server.xml



type=”org.apache.catalina.UserDatabase”
description=”User database that can be updated and saved”
factory=”org.apache.catalina.users.MemoryUserDatabaseFactory”
pathname=”conf/tomcat-users.xml” />


type=”javax.sql.DataSource” driverClassName=”com.mysql.cj.jdbc.Driver”
url=”jdbc:mysql://localhost:3306/fgedudb?useSSL=false&serverTimezone=UTC”
username=”fgedu” password=”fgedu123″ maxTotal=”20″ maxIdle=”10″
maxWaitMillis=”10000″ />

# 编辑server.xml文件,配置DataSourceRealm
vi /Tomcat/app/conf/server.xml

dataSourceName=”jdbc/fgedudb”
userTable=”users”
userNameCol=”username”
userCredCol=”password”
userRoleTable=”user_roles”
roleNameCol=”role” />

# 重启Tomcat服务
/Tomcat/app/bin/shutdown.sh && /Tomcat/app/bin/startup.sh
Using CATALINA_BASE: /Tomcat/app
Using CATALINA_HOME: /Tomcat/app
Using CATALINA_TMPDIR: /Tomcat/app/temp
Using JRE_HOME: /usr/lib/jvm/java-17-openjdk
Using CLASSPATH: /Tomcat/app/bin/bootstrap.jar:/Tomcat/app/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.

4.4 JNDIRealm配置实战

# 编辑server.xml文件,配置JNDIRealm
vi /Tomcat/app/conf/server.xml

connectionURL=”ldap://localhost:389″
connectionName=”cn=admin,dc=fgedu,dc=net,dc=cn”
connectionPassword=”admin123″
userBase=”ou=users,dc=fgedu,dc=net,dc=cn”
userSearch=”(uid={0})”
userSubtree=”true”
roleBase=”ou=roles,dc=fgedu,dc=net,dc=cn”
roleName=”cn”
roleSearch=”(member={0})”
roleSubtree=”true” />

# 重启Tomcat服务
/Tomcat/app/bin/shutdown.sh && /Tomcat/app/bin/startup.sh
Using CATALINA_BASE: /Tomcat/app
Using CATALINA_HOME: /Tomcat/app
Using CATALINA_TMPDIR: /Tomcat/app/temp
Using JRE_HOME: /usr/lib/jvm/java-17-openjdk
Using CLASSPATH: /Tomcat/app/bin/bootstrap.jar:/Tomcat/app/bin/tomcat-juli.jar
Using CATALINA_OPTS:
Tomcat started.

4.5 常见问题与解决方案

  • 认证失败:检查用户名和密码是否正确,确保用户具有相应角色
  • 数据库连接失败:检查数据库连接配置,确保数据库服务正常运行
  • LDAP连接失败:检查LDAP服务器配置,确保网络连接正常
  • 权限错误:检查安全约束配置,确保角色设置正确
  • 密码加密问题:检查密码加密方式,确保与Realms配置一致

学习交流加群风哥QQ113257174

Part05-风哥经验总结与分享

5.1 最佳实践

  • 生产环境推荐使用JDBCRealm或DataSourceRealm
  • 使用密码加密存储
  • 配置适当的连接池
  • 定期备份用户数据
  • 监控认证失败情况

5.2 安全优化

安全优化建议:

  • 使用HTTPS传输认证信息
  • 配置适当的会话超时
  • 限制认证尝试次数
  • 使用强密码策略
  • 定期更新密码
  • 启用审计日志

5.3 自动化管理

自动化管理脚本示例:

# 自动化管理脚本
vi realm.sh
#!/bin/bash
# realm.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

# 配置参数
MYSQL_USER=”root”
MYSQL_PASS=”root123″
DB_NAME=”fgedudb”

# 添加用户
add_user() {
local username=$1
local password=$2
local role=$3

mysql -u “$MYSQL_USER” -p”$MYSQL_PASS” << EOF
USE $DB_NAME;
INSERT INTO users (username, password) VALUES (‘$username’, ‘$password’);
INSERT INTO user_roles (username, role) VALUES (‘$username’, ‘$role’);
EOF

echo “用户 $username 添加成功,角色:$role”
}

# 删除用户
delete_user() {
local username=$1

mysql -u “$MYSQL_USER” -p”$MYSQL_PASS” << EOF
USE $DB_NAME;
DELETE FROM user_roles WHERE username=’$username’;
DELETE FROM users WHERE username=’$username’;
EOF

echo “用户 $username 删除成功”
}

# 列出用户
list_users() {
mysql -u “$MYSQL_USER” -p”$MYSQL_PASS” << EOF
USE $DB_NAME;
SELECT u.username, r.role FROM users u JOIN user_roles r ON u.username = r.username;
EOF
}

# 主函数
case “$1” in
add)
add_user “$2” “$3” “$4”
;;
delete)
delete_user “$2”
;;
list)
list_users
;;
*)
echo “Usage: $0 {add|delete|list} [username] [password] [role]”
;;
esac

5.4 故障排查

  • 查看Tomcat日志文件
  • 检查数据库连接
  • 验证用户凭据
  • 检查安全约束配置
  • 测试认证流程
  • 检查网络连接

风哥提示:在生产环境中,建议使用DataSourceRealm结合连接池,提高性能和可靠性。同时,要定期备份用户数据,防止数据丢失。

总结

本文详细介绍了Tomcat Realms的配置与容器化安全管控方法,包括不同类型Realms的配置和使用。通过本文的学习,您应该掌握了Tomcat Realms的核心概念和配置技巧。

Tomcat Realms是Tomcat安全体系的核心组成部分,为Tomcat应用提供了认证和授权功能。在实际应用中,建议根据业务需求选择合适的Realms类型,并配置适当的安全设置。

更多学习教程公众号风哥教程itpux_com

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息