Tomcat的配置文件中有哪些关键的配置项,它们分别有什么作用?

Tomcat的配置文件主要包括server.xmlweb.xml,它们位于Tomcat安装目录下的conf文件夹中。今天的内容重点介绍 server.xml 文件的配置,V 哥会结合一些业务场景来介绍,希望可以帮助到你,以下是一些关键的配置项及其作用:

server.xml中的配置项:

  1. <Server>: 根元素,定义了Tomcat服务器的配置。

    • port: 用于设置Tomcat服务器的端口,默认是8005。
  2. <Service> : 定义服务的元素,包含一个或多个<Connector><Engine>

    • name: 服务的名称。
    • port: 服务监听的端口。
  3. <Connector>: 定义HTTP连接的配置。

    • port: HTTP连接的端口,默认是8080。
    • protocol: 连接使用的协议,如HTTP/1.1。
    • redirectPort: 当使用SSL时,非SSL请求被重定向到的端口。
  4. <Engine> : 定义引擎的配置,引擎是Tomcat的组件,用于路由请求到相应的<Host>

    • defaultHost: 默认主机名。
  5. <Host>: 定义虚拟主机的配置。

    • name: 虚拟主机的名称,可以是域名或IP地址。
    • appBase: 应用程序的基础目录。
    • unpackWAR: 是否解压WAR文件。
  6. <Context>: 定义Web应用程序的上下文配置。

    • path: Web应用程序的路径。
    • docBase: Web应用程序的基础目录或WAR文件的路径。
    • reloadable: 是否允许重新加载应用程序。
  7. <Listener>: 定义服务器监听器,用于执行启动和停止操作。

  8. <Realm>: 定义安全域,用于认证和授权。

  9. <Valve>: 定义请求处理过程中的阀门,可以拦截或处理请求。

1. <server>

<Server>元素是Tomcat配置文件server.xml中的根元素,它包含了整个Tomcat服务器的配置信息。以下是一些具体的业务场景和相应的<Server>配置示例:

场景1:开发环境

在开发环境中,我们通常希望Tomcat服务器能够快速重启以便于开发和测试。因此,可以配置较短的JVM暂停时间,以便在发生错误时快速响应。

xml 复制代码
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.startup.ContextConfig" />
  <Listener className="org.apache.catalina.startup.UserDataConfig" />
  <GlobalNamingResources>
    <!-- 配置资源 -->
  </GlobalNamingResources>
</Server>

场景2:生产环境

在生产环境中,稳定性和安全性是首要考虑的因素。因此,可能需要配置更长的JVM暂停时间来减少重启次数,同时配置SSL证书以支持HTTPS。

xml 复制代码
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <!-- 其他监听器配置 -->
  <GlobalNamingResources>
    <!-- 配置SSL证书 -->
    <Resource name="UserDatabase" auth="Container"
      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" />
  </GlobalNamingResources>
  <!-- 配置SSL连接器 -->
  <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
             scheme="https" secure="true" SSLEnabled="true"
             keystoreFile="/path/to/keystore.jks" keystorePass="password" />
</Server>

场景3:负载均衡

如果Tomcat服务器作为负载均衡集群的一部分,可能需要配置特定的端口用于集群通信,例如使用Tomcat的集群部署协议。

xml 复制代码
<Server port="8005" shutdown="SHUTDOWN">
  <!-- 配置集群监听器 -->
  <Listener className="org.apache.catalina.ha.session.JvmRouteBinderListener" />
  <GlobalNamingResources>
    <!-- 配置集群相关资源 -->
  </GlobalNamingResources>
  <!-- 配置服务和引擎 -->
  <Service name="CatalinaCluster">
    <Engine name="clusterEngine" defaultHost="localhost" jvmRoute="jvm1">
      <!-- 配置Connector和Host -->
    </Engine>
  </Service>
</Server>

场景4:多实例部署

在需要在同一台服务器上部署多个Tomcat实例的场景中,可以为每个实例配置不同的<Server>端口。

xml 复制代码
<Server port="8006" shutdown="SHUTDOWN">
  <!-- 配置第一个Tomcat实例的监听器和资源 -->
</Server>
<Server port="8007" shutdown="SHUTDOWN">
  <!-- 配置第二个Tomcat实例的监听器和资源 -->
</Server>

2. <Service>

<Service>元素在Tomcat的server.xml配置文件中定义了一个服务,它将一个或多个连接器(<Connector>)与一个引擎(<Engine>)关联起来。以下是根据不同业务场景的<Service>配置示例:

场景1:单实例应用

对于大多数基本应用,您可能只需要一个服务实例来处理所有的HTTP请求。以下是一个基本的<Service>配置:

xml 复制代码
<Service name="Catalina">
  <Connector port="8080" protocol="HTTP/1.1"
             connectionTimeout="20000"
             redirectPort="8443" />
  <Engine name="Catalina" defaultHost="localhost">
    <!-- 其他配置,如Host等 -->
  </Engine>
</Service>

场景2:支持SSL的HTTPS服务

如果您的应用需要通过HTTPS提供安全连接,您需要配置一个支持SSL的<Connector>

xml 复制代码
<Service name="Catalina">
  <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
             SSLEnabled="true"
             keystoreFile="/path/to/your.keystore"
             keystorePass="your_keystore_password"
             scheme="https" secure="true" />
  <Engine name="Catalina" defaultHost="localhost">
    <!-- 其他配置 -->
  </Engine>
</Service>

场景3:负载均衡

在负载均衡场景中,您可能需要多个服务实例来处理请求。每个服务可以绑定到不同的端口,并配置为处理不同类型的请求:

xml 复制代码
<Service name="CatalinaCluster">
  <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" />
  <Engine name="Catalina" defaultHost="loadbalancer" jvmRoute="node1">
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" />
    <Host name="loadbalancer" appBase="webapps" unpackWARs="true" autoDeploy="true">
      <!-- 负载均衡器的配置 -->
    </Host>
  </Engine>
</Service>

场景4:多个Web应用

如果您需要在同一台服务器上运行多个Web应用,可以为每个应用配置不同的<Service>

xml 复制代码
<Service name="Catalina1">
  <Connector port="8081" protocol="HTTP/1.1" />
  <Engine name="Catalina1" defaultHost="app1.example.com">
    <Host name="app1.example.com" appBase="webapp1" unpackWARs="true" autoDeploy="true">
      <!-- 应用1的配置 -->
    </Host>
  </Engine>
</Service>

<Service name="Catalina2">
  <Connector port="8082" protocol="HTTP/1.1" />
  <Engine name="Catalina2" defaultHost="app2.example.com">
    <Host name="app2.example.com" appBase="webapp2" unpackWARs="true" autoDeploy="true">
      <!-- 应用2的配置 -->
    </Host>
  </Engine>
</Service>

场景5:高可用性配置

在需要高可用性的业务场景中,可以配置多个服务实例,每个实例运行在不同的端口上,并通过集群管理器进行管理:

xml 复制代码
<Service name="CatalinaHA">
  <Connector port="8080" protocol="HTTP/1.1" redirectPort="8443" />
  <Engine name="Catalina" defaultHost="app.example.com" jvmRoute="node1">
    <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
      <Channel className="org.apache.catalina.ha.tcp.ReplicationChannel">
        <Member className="org.apache.catalina.ha.tcp.ReplicationMember"
                host="node2"
                port="4000" />
      </Channel>
    </Cluster>
    <Host name="app.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
      <!-- 高可用性应用的配置 -->
    </Host>
  </Engine>
</Service>

3. <Connector>

<Connector>元素在Tomcat的server.xml配置文件中定义了服务器的网络连接参数,它用于处理客户端的HTTP请求。以下是根据不同业务场景的<Connector>配置示例:

场景1:HTTP服务

对于基本的HTTP服务,您需要配置一个标准的HTTP连接器:

xml 复制代码
<Connector port="8080" protocol="HTTP/1.1"
           connectionTimeout="20000"
           redirectPort="8443" />
  • port: 设置HTTP服务监听的端口。
  • protocol: 指定使用的协议,这里使用Tomcat的HTTP/1.1处理器。
  • connectionTimeout: 请求超时时间(毫秒)。
  • redirectPort: 当客户端使用HTTP请求时,重定向到的HTTPS端口。

场景2:HTTPS服务

如果您的应用需要通过HTTPS提供加密连接,您需要配置一个支持SSL的连接器:

xml 复制代码
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           connectionTimeout="20000"
           scheme="https" secure="true"
           SSLEnabled="true"
           keystoreFile="conf/keystore.jks"
           keystorePass="changeit" />
  • scheme: 设置为https表示使用安全的连接。
  • secure: 设置为true表示请求需要安全连接。
  • SSLEnabled: 设置为true以启用SSL。
  • keystoreFile: 指定包含SSL证书的密钥库文件路径。
  • keystorePass: 密钥库的密码。

场景3:性能优化

对于需要处理大量并发请求的应用,可以配置NIO(非阻塞I/O)或NIO2的连接器来提高性能:

xml 复制代码
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
           connectionTimeout="20000"
           maxThreads="150" minSpareThreads="25"
           acceptCount="100" />
  • maxThreads: 最大工作线程数。
  • minSpareThreads: 保持运行的最小空闲线程数。
  • acceptCount: 可以接受的请求队列长度。

场景4:限制请求大小

为了防止服务器被大文件上传拖慢,可以限制请求的最大大小:

xml 复制代码
<Connector port="8080" protocol="HTTP/1.1"
           maxPostSize="20971520" />
  • maxPostSize: 最大POST请求大小,这里设置为20MB。

场景5:启用GZIP压缩

为了减少网络传输的数据量,可以配置连接器以启用GZIP压缩:

xml 复制代码
<Connector port="8080" protocol="HTTP/1.1"
           compression="on"
           compressionMinSize="2048"
           noCompressionUserAgent="gozilla, traviata" />
  • compression: 设置为on以启用压缩。
  • compressionMinSize: 启用压缩的请求最小大小(字节)。
  • noCompressionUserAgent: 不应用压缩的浏览器列表。

场景6:配置代理设置

如果您的Tomcat服务器位于一个或多个代理之后,您可能需要配置连接器以正确处理请求头:

xml 复制代码
<Connector port="8080" protocol="HTTP/1.1"
           proxyName="www.example.com"
           proxyPort="80"
           scheme="http"
           secure="false" />
  • proxyName: 代理服务器的主机名。
  • proxyPort: 代理服务器监听的端口。

4. <Engine>

<Engine>元素在Tomcat的server.xml配置文件中代表了一个请求引擎,它负责接收<Service>中的<Connector>转发的请求,并将请求路由到相应的<Host><Context>。以下是根据不同业务场景的<Engine>配置示例:

场景1:基本Web应用路由

对于基本的Web应用部署,您可能只需要将请求路由到默认的虚拟主机:

xml 复制代码
<Engine name="Catalina" defaultHost="localhost">
  <Realm className="org.apache.catalina.realm.LockOutRealm" />
  <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <!-- 可以包含具体的<Context>元素定义 -->
  </Host>
</Engine>
  • name: 引擎的名称,通常与<Service>元素的名称相匹配。
  • defaultHost: 请求无法匹配到任何<Host>时使用的默认主机名。

场景2:部署多个虚拟主机

如果您需要在同一台服务器上部署多个虚拟主机,可以在同一个<Engine>下配置多个<Host>

xml 复制代码
<Engine name="Catalina" defaultHost="default">
  <Host name="app1.example.com" appBase="webapps/app1" unpackWARs="true" autoDeploy="true">
    <!-- 应用1的配置 -->
  </Host>
  <Host name="app2.example.com" appBase="webapps/app2" unpackWARs="true" autoDeploy="true">
    <!-- 应用2的配置 -->
  </Host>
</Engine>

场景3:集群部署

在需要高可用性的集群部署场景中,可以配置集群管理器来同步会话信息:

xml 复制代码
<Engine name="Catalina" defaultHost="localhost" jvmRoute="node1">
  <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster">
    <Channel className="org.apache.catalina.ha.tcp.ReplicationChannel">
      <Member className="org.apache.catalina.ha.tcp.ReplicationMember"
              host="node2"
              port="4000" />
    </Channel>
  </Cluster>
  <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <!-- 主机配置 -->
  </Host>
</Engine>
  • jvmRoute: 当前实例的JVM路由标识,用于集群中的会话查找。

场景4:自定义请求过滤器

如果您需要对所有请求应用自定义过滤器,可以在<Engine>下配置<Valve>

xml 复制代码
<Engine name="Catalina" defaultHost="localhost">
  <Valve className="com.example.MyCustomRequestFilter" />
  <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <!-- 主机配置 -->
  </Host>
</Engine>
  • className: 指定自定义过滤器的完整类名。

场景5:访问日志配置

为了记录所有请求的访问日志,可以在<Engine>下配置访问日志阀:

xml 复制代码
<Engine name="Catalina" defaultHost="localhost">
  <Realm className="org.apache.catalina.realm.LockOutRealm" />
  <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <!-- 主机配置 -->
  </Host>
  <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
         prefix="access_log." suffix=".txt" pattern="common" rotate="true" />
</Engine>
  • directory: 访问日志文件存储的目录。
  • prefixsuffix: 日志文件的前缀和后缀。
  • pattern: 日志记录的格式。
  • rotate: 是否启用日志轮转。

5. <Host>

<Host>元素在Tomcat的server.xml配置文件中配置了一个虚拟主机,它处理指向特定主机名或IP地址的请求。以下是根据不同业务场景的<Host>配置示例:

场景1:单个应用的虚拟主机

对于单个应用的部署,您可以配置一个虚拟主机,所有请求都会映射到这个应用:

xml 复制代码
<Host name="myapp.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
  <!-- 应用的Context配置可以在这里添加,或者在单独的XML文件中配置 -->
</Host>
  • name: 虚拟主机的名称,通常是应用的域名。

场景2:多个应用的虚拟主机

如果您希望一个虚拟主机管理多个应用,可以在<Host>下配置多个<Context>

xml 复制代码
<Host name="multiapp.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
  <Context path="/app1" docBase="app1" />
  <Context path="/app2" docBase="app2" />
  <!-- 更多应用的Context配置 -->
</Host>
  • path: Web应用的路径。
  • docBase: Web应用的文档基础路径或WAR文件名。

场景3:使用外部定义的Context

在复杂的部署场景中,您可能希望将<Context>配置在外部XML文件中,以保持server.xml的清晰:

xml 复制代码
<Host name="externalctx.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
  <Context path="" docBase="external" reloadable="true" />
  <!-- 其他Context配置 -->
</Host>
  • <Context>path可以留空,表示应用的根路径。
  • docBase可以指向包含context.xml文件的目录。

场景4:配置别名

如果您希望虚拟主机响应多个域名,可以使用<Alias>元素:

xml 复制代码
<Host name="alias.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
  <Alias>www.alias.com</Alias>
  <!-- 应用的Context配置 -->
</Host>
  • <Alias>: 虚拟主机的另一个域名。

场景5:配置SSL

对于需要SSL加密的虚拟主机,可以配置一个SSL连接器,并在<Host>中指定SSL相关属性:

xml 复制代码
<Host name="secure.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true"
      sslProtocol="TLS" sslCertificateFile="/path/to/certificate.cer"
      sslCertificateKeyFile="/path/to/key.key" sslPort="8443">
  <!-- 应用的Context配置 -->
</Host>
  • sslProtocol: 使用的SSL协议。
  • sslCertificateFilesslCertificateKeyFile: SSL证书和私钥文件的路径。
  • sslPort: SSL端口,当客户端通过这个端口访问时,将使用SSL。

场景6:禁用某些HTTP方法

出于安全考虑,您可能希望禁用某些HTTP方法:

xml 复制代码
<Host name="securemethods.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
  <Valve className="org.apache.catalina.valves.AccessLogValve" 
         pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  <Context>
    <Valve className="org.apache.catalina.valves.MethodDisablerValve" methods="TRACE" />
  </Context>
</Host>
  • methods: 需要禁用的HTTP方法列表。

6. <Context>

<Context>元素在Tomcat的server.xml配置文件中定义了Web应用程序的上下文。每个<Context>代表一个Web应用,包括它的路径、文档基础、会话管理和其他特定于应用的设置。以下是根据不同业务场景的<Context>配置示例:

场景1:基本Web应用部署

对于基本的Web应用部署,您需要指定应用的路径和文档基础:

xml 复制代码
<Context path="/myapp" docBase="myapp" />
  • path: Web应用的URL路径。
  • docBase: Web应用的目录或WAR文件的名称。

场景2:配置外部WAR文件

如果您有一个外部WAR文件,希望部署为特定的上下文路径:

xml 复制代码
<Context path="/externalapp" docBase="/path/to/externalapp.war" />
  • docBase: 指向外部WAR文件的绝对路径。

场景3:使用相对路径的WAR文件

在某些情况下,您可能希望使用相对于appBase的相对路径:

xml 复制代码
<Context path="/relapp" docBase="webapps/relapp.war" />

场景4:配置会话超时

为了管理会话的生命周期,您可以设置会话超时时间(以分钟为单位):

xml 复制代码
<Context path="/myapp" docBase="myapp" sessionTimeout="30" />

场景5:启用应用的重新加载

在开发过程中,您可能希望在代码更改后自动重新加载应用:

xml 复制代码
<Context path="/devapp" docBase="devapp" reloadable="true" />
  • reloadable: 设置为true以启用应用的自动重新加载。

场景6:配置资源链接

如果您的应用需要连接到外部资源(如数据库),您可以配置资源链接:

xml 复制代码
<Context path="/myapp" docBase="myapp">
  <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
                name="jdbc/myAppDB" />
</Context>
  • ResourceLink: 定义了一个资源链接,允许应用访问在<GlobalNamingResources>中定义的资源。

场景7:配置安全设置

对于需要安全认证的应用,您可以配置安全约束和角色:

xml 复制代码
<Context path="/secapp" docBase="secapp">
  <SecurityConstraint>
    <WebResourceCollection urlPattern="/*">
      <HttpMethod constraint="POST,PUT" />
    </WebResourceCollection>
    <AuthConstraint>
      < Role name="admin" />
    </AuthConstraint>
  </SecurityConstraint>
  <Valve className="org.apache.catalina.authenticator.BasicAuthenticator" />
</Context>
  • SecurityConstraint: 定义了哪些资源需要安全保护。
  • WebResourceCollection: 定义了受保护的URL模式和HTTP方法。
  • AuthConstraint: 定义了允许访问的的角色。
  • Valve: 指定了认证的类型(例如,基本认证)。

场景8:配置字符集和本地化

为了确保应用正确处理国际化内容,您可以配置字符集和本地化:

xml 复制代码
<Context path="/globalapp" docBase="globalapp" useHttpOnly="true">
  <LocaleConfig defaultLocale="en" />
  <CharsetConfig>
    <Charset name="UTF-8" />
  </CharsetConfig>
</Context>
  • useHttpOnly: 设置为true以启用HttpOnly Cookies。
  • LocaleConfig: 定义了默认地区设置。
  • CharsetConfig: 定义了应用使用的字符集。

7. <Listener>

<Listener>元素在Tomcat的server.xml配置文件中用于注册事件监听器,这些监听器在Tomcat的生命周期事件(如启动和停止)发生时被调用。以下是根据不同业务场景的<Listener>配置示例:

场景1:自定义上下文初始化

如果您需要在Tomcat启动时执行自定义逻辑,比如初始化数据库连接池或加载应用程序特定的资源,可以定义一个自定义的上下文监听器:

xml 复制代码
<Listener className="com.example.MyContextListener" />
  • className: 指定自定义监听器的完整类名。

场景2:SSL证书管理

在需要动态加载或刷新SSL证书的业务场景中,可以使用自定义的证书管理监听器:

xml 复制代码
<Listener className="com.example.SSLCertLoader" />

场景3:集群会话管理

当Tomcat配置为集群模式时,可以使用特定的监听器来管理会话复制:

xml 复制代码
<Listener className="org.apache.catalina.ha.session.JvmRouteBinderListener" />
  • 这个监听器是Tomcat集群会话管理的一部分,用于设置JVM路由。

场景4:请求日志记录

为了记录所有进入Tomcat的请求,可以配置请求日志监听器:

xml 复制代码
<Listener className="org.apache.catalina.core.AsyncListenerWrapper" />
<Listener className="org.apache.catalina.core.AprLifecycleListener" />
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="access_log" suffix=".txt" pattern="common" resolveHosts="false" />
  • AccessLogValve: 用于记录访问日志的监听器,可以设置日志的目录、前缀、后缀和日志模式。

场景5:性能监控

为了监控Tomcat的性能,可以添加性能监控监听器:

xml 复制代码
<Listener className="com.example.PerformanceMonitor" />

场景6:Tomcat资源管理

Tomcat的资源管理监听器可以用于跟踪和管理JNDI资源:

xml 复制代码
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

场景7:自定义用户数据管理

如果您需要在Tomcat启动或停止时加载或保存用户数据,可以定义一个自定义的用户数据管理监听器:

xml 复制代码
<Listener className="com.example.UserDataManager" />

场景8:Tomcat安全监听器

Tomcat提供了一些内置的安全监听器,用于在启动和停止时进行安全相关的初始化和清理:

xml 复制代码
<Listener className="org.apache.catalina.authenticator.AuthenticatorBase" />

8. <Realm>

<Realm>元素在Tomcat的server.xml配置文件中定义了安全域,它负责处理用户认证和授权。以下是根据不同业务场景的<Realm>配置示例:

场景1:使用内存认证

在开发环境中,您可能希望使用内存中的用户和角色列表进行认证:

xml 复制代码
<Realm className="org.apache.catalina.realm.MemoryRealm" />

场景2:使用JDBC数据库认证

对于生产环境,您可能需要使用数据库存储用户信息和角色信息:

xml 复制代码
<Realm className="org.apache.catalina.realm.JDBCRealm"
        driverName="com.mysql.jdbc.Driver"
        connectionURL="jdbc:mysql://localhost:3306/tomcatdb"
        dataSourceName="java:comp/env/jdbc/tomcatDataSource"
        userTable="users" userCredColumn="password" userNameColumn="username" />
  • driverName: JDBC驱动的类名。
  • connectionURL: 数据库连接URL。
  • dataSourceName: JNDI资源名称,用于查找数据源。
  • userTable: 存储用户信息的数据库表。
  • userCredColumn: 存储密码的列。
  • userNameColumn: 存储用户名的列。

场景3:使用JAAS认证

如果您的应用需要使用Java Authentication and Authorization Service (JAAS),可以配置JAAS认证:

xml 复制代码
<Realm className="org.apache.catalina.realm.JAASRealm"
        appName="myApp" />
  • appName: JAAS应用的名称。

场景4:使用LDAP认证

当用户信息存储在LDAP服务器时,可以使用LDAP认证:

xml 复制代码
<Realm className="org.apache.catalina.realm.JNDIRealm"
        userPattern="uid={0},ou=people,dc=example,dc=com"
        connectionName="uid=admin,ou=people,dc=example,dc=com"
        connectionPassword="adminpassword"
        url="ldap://ldap.example.com:389/" />
  • userPattern: LDAP中用户信息的搜索模式。
  • connectionName: 连接LDAP服务器的用户名。
  • connectionPassword: 连接LDAP服务器的密码。
  • url: LDAP服务器的URL。

场景5:使用自定义Realm

如果您有特殊的认证需求,可以创建自定义的Realm实现:

xml 复制代码
<Realm className="com.example.MyCustomRealm" />

场景6:结合多个Realm使用

在某些业务场景中,您可能需要结合多个Realm进行认证,例如,首先尝试使用内存认证,如果失败再尝试使用数据库认证:

xml 复制代码
<Realm className="org.apache.catalina.realm.CombinedRealm">
    <Realm className="org.apache.catalina.realm.MemoryRealm" />
    <Realm className="org.apache.catalina.realm.JDBCRealm"
           driverName="..."
           connectionURL="..."
           userTable="..."
           userCredColumn="..."
           userNameColumn="..." />
</Realm>
  • CombinedRealm: 组合多个Realm的认证器。

场景7:使用容器管理的Realm

如果您使用Tomcat在应用服务器(如GlassFish或JBoss)中,可能需要使用容器管理的Realm:

xml 复制代码
<Realm className="org.apache.catalina.realm.ContainerRealm"
        ignoreEmptyPassword="true" />
  • ignoreEmptyPassword: 是否忽略空密码。

9. <Valve>

<Valve>元素在Tomcat的server.xml配置文件中用于插入自定义的处理逻辑,这些处理逻辑可以在请求处理管道的不同阶段执行。以下是根据不同业务场景的<Valve>配置示例:

场景1:访问日志记录

记录每个请求的详细日志信息,这对于分析流量和调试应用非常有用:

xml 复制代码
<Valve className="org.apache.catalina.valves.AccessLogValve" 
       pattern="%h %l %u %t &quot;%r&quot; %s %b" />
  • pattern: 定义日志的格式,%h, %l, %u, %t, %r, %s, %b 分别代表主机名、登录名、用户ID、时间、请求行、状态码和字节数。

场景2:请求响应时间记录

监控每个请求的响应时间,以评估应用性能:

xml 复制代码
<Valve className="org.apache.catalina.valves.RequestDumpValve" />

场景3:请求过滤

过滤特定的请求,例如禁用或限制某些HTTP方法:

xml 复制代码
<Valve className="org.apache.catalina.valves.MethodDisablerValve" methods="TRACE" />
  • methods: 指定要禁用的HTTP方法列表。

场景4:静态资源缓存

为静态资源设置缓存头,以提高响应速度和减少服务器负载:

xml 复制代码
<Valve className="org.apache.catalina.valves.StaticResourcesValve" 
       cache="maxSize=100000,ttl=3600" />
  • cache: 定义缓存的大小和时间(TTL)。

场景5:SSL认证

强制所有请求都使用SSL连接,增强应用安全性:

xml 复制代码
<Valve className="org.apache.catalina.valves.SSLValve" keystoreFile="/path/to/keystore.jks" keystorePass="password" />
  • keystoreFile: 密钥库文件的路径。
  • keystorePass: 密钥库的密码。

场景6:请求重写

根据特定规则重写请求URI,用于URL重定向或重写:

xml 复制代码
<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />

场景7:自定义请求处理

执行自定义的请求处理逻辑,例如用户请求的预处理或后处理:

xml 复制代码
<Valve className="com.example.MyCustomRequestValve" />

场景8:会话管理

自定义会话管理逻辑,例如会话超时处理或会话持久化:

xml 复制代码
<Valve className="org.apache.catalina.valves.SessionValve" />

场景9:错误页面定制

自定义错误页面的响应,例如为不同的HTTP状态码定义不同的错误页面:

xml 复制代码
<Valve className="org.apache.catalina.valves.ErrorReportValve" 
       showReport="false" showServerInfo="false" />
  • showReport: 是否显示详细的错误报告。
  • showServerInfo: 是否显示服务器信息。

最后

以上是 server.xml 文件中重要的配置项,在项目应用中,不同的场景配置也不同,以上供你参考,如果你愿意分享你在项目中的配置场景案例,欢迎评论区见,卷的时代,兄弟们一起搀扶前行。

相关推荐
尢词1 天前
SpringMVC
java·spring·java-ee·tomcat·maven
清风百草1 天前
【04】【Maven项目热部署】将Maven项目热部署到远程tomcat服务器上
tomcat·maven项目热部署
蒋桐城2 天前
Tomcat 启动卡住,日志显示 At least one JAR was scanned for TLDs yet contained no TLDs.
java·tomcat
qiaosaifei2 天前
SpringBoot项目中替换指定版本的tomcat
spring boot·后端·tomcat
雷神乐乐2 天前
IDEA构建JavaWeb项目,并通过Tomcat成功运行
服务器·tomcat·javaweb
陈大爷(有低保)2 天前
数据库连接池JNDI
数据库·mysql·tomcat
笔墨登场说说2 天前
JDK 里面的线程池和Tomcat线程池的区别
java·servlet·tomcat
爱分享的淘金达人3 天前
25国考照片处理器使用流程图解❗
java·考研·spring·eclipse·tomcat
爱分享的淘金达人3 天前
2025年山东省考报名流程图解
java·考研·spring·eclipse·tomcat·流程图
弓弧名家_玄真君3 天前
mac 安装tomcat
java·macos·tomcat