动态

详情 返回 返回

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暫停時間,以便在發生錯誤時快速響應。

<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。

<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的集羣部署協議。

<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>端口。

<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>配置:

<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>

<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:負載均衡

在負載均衡場景中,您可能需要多個服務實例來處理請求。每個服務可以綁定到不同的端口,並配置為處理不同類型的請求:

<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>

<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:高可用性配置

在需要高可用性的業務場景中,可以配置多個服務實例,每個實例運行在不同的端口上,並通過集羣管理器進行管理:

<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連接器:

<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的連接器:

<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的連接器來提高性能:

<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
           connectionTimeout="20000"
           maxThreads="150" minSpareThreads="25"
           acceptCount="100" />
  • maxThreads: 最大工作線程數。
  • minSpareThreads: 保持運行的最小空閒線程數。
  • acceptCount: 可以接受的請求隊列長度。

場景4:限制請求大小

為了防止服務器被大文件上傳拖慢,可以限制請求的最大大小:

<Connector port="8080" protocol="HTTP/1.1"
           maxPostSize="20971520" />
  • maxPostSize: 最大POST請求大小,這裏設置為20MB。

場景5:啓用GZIP壓縮

為了減少網絡傳輸的數據量,可以配置連接器以啓用GZIP壓縮:

<Connector port="8080" protocol="HTTP/1.1"
           compression="on"
           compressionMinSize="2048"
           noCompressionUserAgent="gozilla, traviata" />
  • compression: 設置為on以啓用壓縮。
  • compressionMinSize: 啓用壓縮的請求最小大小(字節)。
  • noCompressionUserAgent: 不應用壓縮的瀏覽器列表。

場景6:配置代理設置

如果您的Tomcat服務器位於一個或多個代理之後,您可能需要配置連接器以正確處理請求頭:

<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應用部署,您可能只需要將請求路由到默認的虛擬主機:

<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>

<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:集羣部署

在需要高可用性的集羣部署場景中,可以配置集羣管理器來同步會話信息:

<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>

<Engine name="Catalina" defaultHost="localhost">
  <Valve className="com.example.MyCustomRequestFilter" />
  <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
    <!-- 主機配置 -->
  </Host>
</Engine>
  • className: 指定自定義過濾器的完整類名。

場景5:訪問日誌配置

為了記錄所有請求的訪問日誌,可以在<Engine>下配置訪問日誌閥:

<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:單個應用的虛擬主機

對於單個應用的部署,您可以配置一個虛擬主機,所有請求都會映射到這個應用:

<Host name="myapp.example.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
  <!-- 應用的Context配置可以在這裏添加,或者在單獨的XML文件中配置 -->
</Host>
  • name: 虛擬主機的名稱,通常是應用的域名。

場景2:多個應用的虛擬主機

如果您希望一個虛擬主機管理多個應用,可以在<Host>下配置多個<Context>

<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的清晰:

<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>元素:

<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相關屬性:

<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方法:

<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應用部署,您需要指定應用的路徑和文檔基礎:

<Context path="/myapp" docBase="myapp" />
  • path: Web應用的URL路徑。
  • docBase: Web應用的目錄或WAR文件的名稱。

場景2:配置外部WAR文件

如果您有一個外部WAR文件,希望部署為特定的上下文路徑:

<Context path="/externalapp" docBase="/path/to/externalapp.war" />
  • docBase: 指向外部WAR文件的絕對路徑。

場景3:使用相對路徑的WAR文件

在某些情況下,您可能希望使用相對於appBase的相對路徑:

<Context path="/relapp" docBase="webapps/relapp.war" />

場景4:配置會話超時

為了管理會話的生命週期,您可以設置會話超時時間(以分鐘為單位):

<Context path="/myapp" docBase="myapp" sessionTimeout="30" />

場景5:啓用應用的重新加載

在開發過程中,您可能希望在代碼更改後自動重新加載應用:

<Context path="/devapp" docBase="devapp" reloadable="true" />
  • reloadable: 設置為true以啓用應用的自動重新加載。

場景6:配置資源鏈接

如果您的應用需要連接到外部資源(如數據庫),您可以配置資源鏈接:

<Context path="/myapp" docBase="myapp">
  <ResourceLink global="jdbc/myDB" type="javax.sql.DataSource"
                name="jdbc/myAppDB" />
</Context>
  • ResourceLink: 定義了一個資源鏈接,允許應用訪問在<GlobalNamingResources>中定義的資源。

場景7:配置安全設置

對於需要安全認證的應用,您可以配置安全約束和角色:

<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:配置字符集和本地化

為了確保應用正確處理國際化內容,您可以配置字符集和本地化:

<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啓動時執行自定義邏輯,比如初始化數據庫連接池或加載應用程序特定的資源,可以定義一個自定義的上下文監聽器:

<Listener className="com.example.MyContextListener" />
  • className: 指定自定義監聽器的完整類名。

場景2:SSL證書管理

在需要動態加載或刷新SSL證書的業務場景中,可以使用自定義的證書管理監聽器:

<Listener className="com.example.SSLCertLoader" />

場景3:集羣會話管理

當Tomcat配置為集羣模式時,可以使用特定的監聽器來管理會話複製:

<Listener className="org.apache.catalina.ha.session.JvmRouteBinderListener" />
  • 這個監聽器是Tomcat集羣會話管理的一部分,用於設置JVM路由。

場景4:請求日誌記錄

為了記錄所有進入Tomcat的請求,可以配置請求日誌監聽器:

<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的性能,可以添加性能監控監聽器:

<Listener className="com.example.PerformanceMonitor" />

場景6:Tomcat資源管理

Tomcat的資源管理監聽器可以用於跟蹤和管理JNDI資源:

<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />

場景7:自定義用户數據管理

如果您需要在Tomcat啓動或停止時加載或保存用户數據,可以定義一個自定義的用户數據管理監聽器:

<Listener className="com.example.UserDataManager" />

場景8:Tomcat安全監聽器

Tomcat提供了一些內置的安全監聽器,用於在啓動和停止時進行安全相關的初始化和清理:

<Listener className="org.apache.catalina.authenticator.AuthenticatorBase" />

8. <Realm>

<Realm>元素在Tomcat的server.xml配置文件中定義了安全域,它負責處理用户認證和授權。以下是根據不同業務場景的<Realm>配置示例:

場景1:使用內存認證

在開發環境中,您可能希望使用內存中的用户和角色列表進行認證:

<Realm className="org.apache.catalina.realm.MemoryRealm" />

場景2:使用JDBC數據庫認證

對於生產環境,您可能需要使用數據庫存儲用户信息和角色信息:

<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認證:

<Realm className="org.apache.catalina.realm.JAASRealm"
        appName="myApp" />
  • appName: JAAS應用的名稱。

場景4:使用LDAP認證

當用户信息存儲在LDAP服務器時,可以使用LDAP認證:

<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實現:

<Realm className="com.example.MyCustomRealm" />

場景6:結合多個Realm使用

在某些業務場景中,您可能需要結合多個Realm進行認證,例如,首先嚐試使用內存認證,如果失敗再嘗試使用數據庫認證:

<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:

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

9. <Valve>

<Valve>元素在Tomcat的server.xml配置文件中用於插入自定義的處理邏輯,這些處理邏輯可以在請求處理管道的不同階段執行。以下是根據不同業務場景的<Valve>配置示例:

場景1:訪問日誌記錄

記錄每個請求的詳細日誌信息,這對於分析流量和調試應用非常有用:

<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:請求響應時間記錄

監控每個請求的響應時間,以評估應用性能:

<Valve className="org.apache.catalina.valves.RequestDumpValve" />

場景3:請求過濾

過濾特定的請求,例如禁用或限制某些HTTP方法:

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

場景4:靜態資源緩存

為靜態資源設置緩存頭,以提高響應速度和減少服務器負載:

<Valve className="org.apache.catalina.valves.StaticResourcesValve" 
       cache="maxSize=100000,ttl=3600" />
  • cache: 定義緩存的大小和時間(TTL)。

場景5:SSL認證

強制所有請求都使用SSL連接,增強應用安全性:

<Valve className="org.apache.catalina.valves.SSLValve" keystoreFile="/path/to/keystore.jks" keystorePass="password" />
  • keystoreFile: 密鑰庫文件的路徑。
  • keystorePass: 密鑰庫的密碼。

場景6:請求重寫

根據特定規則重寫請求URI,用於URL重定向或重寫:

<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />

場景7:自定義請求處理

執行自定義的請求處理邏輯,例如用户請求的預處理或後處理:

<Valve className="com.example.MyCustomRequestValve" />

場景8:會話管理

自定義會話管理邏輯,例如會話超時處理或會話持久化:

<Valve className="org.apache.catalina.valves.SessionValve" />

場景9:錯誤頁面定製

自定義錯誤頁面的響應,例如為不同的HTTP狀態碼定義不同的錯誤頁面:

<Valve className="org.apache.catalina.valves.ErrorReportValve" 
       showReport="false" showServerInfo="false" />
  • showReport: 是否顯示詳細的錯誤報告。
  • showServerInfo: 是否顯示服務器信息。

最後

以上是 server.xml 文件中重要的配置項,在項目應用中,不同的場景配置也不同,以上供你參考,如果你願意分享你在項目中的配置場景案例,歡迎評論區見,卷的時代,兄弟們一起攙扶前行。

user avatar heath_learning 头像 laomao_5902e12974409 头像 russell221 头像 baidusecrity 头像 ruozxby 头像 74_652401b513c3d 头像
点赞 6 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.