Tomcat 给 ** 虚拟主机(<Host>)** 配置访问权限,主要就 2 种最实用方式:
- IP 白名单 / 黑名单(最常用)
- 用户名密码登录访问(整个虚拟主机需要登录)
配置文件:
conf/server.xml一、配置 IP 访问权限(推荐)
直接在你的 <Host> 标签内部 添加
<Valve> 即可。1. 仅允许指定 IP 访问(白名单)
xml
<Host name="www.test.com" appBase="testweb" unpackWARs="true" autoDeploy="true">
<!-- 只允许这些 IP 访问当前虚拟主机 -->
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.0.0.1|192.168.1.*|10.0.0.5" />
</Host>
allow:允许的 IP,用|分隔192.168.1.*表示整个网段都能访问
2. 禁止某些 IP(黑名单)
xml
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow=".*"
deny="192.168.1.100|10.0.0.6" />
二、配置虚拟主机登录权限(账号密码访问)
让整个网站必须输入账号密码才能进入。
1. 先在 conf/tomcat-users.xml 创建账号
xml
<tomcat-users>
<role rolename="host-user"/>
<user username="test" password="123456" roles="host-user"/>
</tomcat-users>
2. 在虚拟主机里配置登录验证
xml
<Host name="www.test.com" appBase="testweb" autoDeploy="true">
<!-- 绑定用户体系 -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<!-- 给整个虚拟主机设置登录 -->
<Context path="" docBase="ROOT">
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>host-user</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</Context>
</Host>
访问时会弹出登录框,必须输入账号密码才能进入。
三、最常用组合:IP 白名单 + 登录验证(企业常用)
xml
<Host name="www.test.com" appBase="testweb" autoDeploy="true">
<!-- IP 白名单 -->
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="192.168.1.*|127.0.0.1" />
<!-- 用户登录 -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Context path="" docBase="ROOT">
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>host-user</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
</login-config>
</Context>
</Host>
四、配置完成后必须做
- 保存 server.xml
- 保存 tomcat-users.xml
- 重启 Tomcat
- 测试访问
五、效果说明
- IP 不在白名单 → 直接 403 禁止访问
- IP 允许但未登录 → 弹出登录框
- 输入正确账号密码 → 正常访问
总结(最简单记忆)
- IP 限制:用
<Valve> - 账号密码限制:用
<Realm> + <security-constraint> - 都配置在 <Host> 内部,只对当前虚拟主机生效