天天看點

Tomcat 6 —— Realm域管理

本篇來源于官方文檔,但不僅僅是翻譯,其中不乏網上搜尋的資料與自己的了解。 如有錯誤,請予指正。
Tomcat 6 —— Realm域管理

  首先說一下什麼是Realm,可以把它了解成“域”,也可以了解成“組”,因為它類似 類Unix系統 中組的概念。

  Realm域提供了一種使用者密碼與web應用的映射關系。

  因為tomcat中可以同時部署多個應用,是以并不是每個管理者都有權限去通路或者使用這些應用,是以出現了使用者的概念。但是想想,如果每個應用都去配置具有權限的使用者,那是一件很麻煩的事情,是以出現了role這樣一個概念。具有某一角色,就可以通路該角色對應的應用,進而達到一種域的效果。

Tomcat 6 —— Realm域管理

  參考上面的圖:

  每個使用者我們可以設定不同的角色(在tomcat-users.xml中配置),

  每個應用中會設定可以通路的角色(在web.xml中配置),

  當tomcat啟動後,就會通過Realm進行驗證(在server.xml中配置),通過驗證才可以通路該應用,

  進而達到角色安全管理的作用。

  在tomcat中,要了解其架構設計,可以參考下面的圖,該圖是從《Apahce tomcat進階配置》一書中扒下來的。

Tomcat 6 —— Realm域管理

  參考上面的圖解釋下:

  server:即伺服器,每個tomcat程式啟動後,就是一個server。

  service:這是一種抽象的服務,通常是在日志或者管理時使用這樣一個概念。它把連接配接器和處理引擎結合在一起。

  connector:用于處理連接配接和并發,通常包括兩種方式HTTP和AJP。HTTP是用于網頁位址欄http這種通路方式;AJP一般用于搭配Apache伺服器。

  engine:處理引擎,所有的請求都是通過處理引擎處理的。

  host:虛拟主機,用于進行請求的映射處理。每個虛拟主機可以看做獨立的請求檔案。

  realm:用于配置安全管理角色,通常讀取tomcat-uesrs.xml進行驗證。

  context:上下文,對應于web應用。

  有了上面的概念的了解,就可以簡單的想象一下tomcat的處理過程:

Tomcat 6 —— Realm域管理

  大體過程如下:

  0 首先請求發送給伺服器;

  1 伺服器使用相應的服務進行處理。

  2 先通過不同的連接配接器請求後發送給處理引擎。

  3 處理引擎通過對虛拟主機的分析,發送給相應的虛拟主機。

  4 虛拟主機使用相應的應用進行相應。

  簡言之,就是請求會先發送到連接配接器,連接配接器轉給處理引擎進行處理。

  再看看預設的server.xml配置檔案

  去掉注釋部分可以觀察的更友善,可以看到預設情況下,Realm的配置位置是在Engine标簽内部,并且使用的是UserDatabase的方式。其他的方式會在下面部分說明。

  其中Realm的不同位置也會影響到它作用的範圍。

1 在<Engine>元素内部 —— Realm将會被所有的虛拟主機上的web應用共享,除非它被<Host>或者<Context>元素内部的Realm元素重寫。 2 在<Host>元素内部 —— 這個Realm将會被本地的虛拟主機中的所有的web應用共享,除非被<Context>元素内部的Realm元素重寫。 3 在<Context>元素内部 —— 這個Realm元素僅僅被該Context指定的應用使用。

  目前tomcat支援多種Realm管理方式,即支援多種方式來讀取使用者資訊進行驗證。參考如下:

   1 JDBCRealm 使用者授權資訊存儲于某個關系型資料庫中,通過JDBC驅動擷取資訊驗證 2 DataSourceRealm 使用者授權資訊存儲于關于型資料中,通過JNDI配置JDBC資料源的方式擷取資訊驗證 3 JNDIRealm  使用者授權資訊存儲在基于LDAP的目錄服務的伺服器中,通過JNDI驅動擷取并驗證 4 UserDatabaseRealm 預設的配置方式,資訊存儲于XML文檔中 conf/tomcat-users.xml 5 MemoryRealm 使用者資訊存儲于記憶體的集合中,對象集合的資料來源于xml文檔 conf/tomcat-users.xml 6 JAASRealm 通過JAAS架構通路授權資訊

  (後續會給出不同的Realm的配置方式)

  1 在server.xml中配置realm通路方式

  參考下預設的配置server.xml中,可以看到預設情況下使用的就是UserDatabaseRealm的方式:

Tomcat 6 —— Realm域管理

  上圖中的代碼配置了UserDatabase的目錄檔案,為conf/tomcat-users.xml

Tomcat 6 —— Realm域管理

  上圖中的代碼配置使用的Realm方式。

  2 在tomcat-users.xml中配置使用者密碼以及配置設定角色

Tomcat 6 —— Realm域管理

  上面是tomcat-users.xml中的配置内容。

  3 在應用的web.xml中配置其通路角色以及安全限制的内容

  關于Realm域的使用,一般都是用來管理一些安全性要求很高的應用,最常見的就是manager應用。   manager應用用于在不停止tomcat的情況下部署或者停止某些應用,處于安全考慮,預設情況下時不能通路manager應用的,是以需要現在tomcat-users.xml中添加使用者以及相應的角色,才能通路。

   參考下tomcat中manager應用的角色配置,觀察其web.xml配置檔案,可以找到下面這段:

  其中role-name就定義了可以通路的角色。

  其他内容中上面定義了限制通路的資源,下面的Login-config比較重要。

  它定義了驗證的方式,BASIC就是基本的彈出對話框輸入使用者名密碼。還是DIGEST方式,這種方式會對網絡中的傳輸資訊進行加密,更安全。

【1】Realms and AAA:http://tomcat.apache.org/tomcat-6.0-doc/realm-howto.html

【2】Realm 配置:http://wibiline.iteye.com/blog/655424

【3】Tomcat安全域:http://blog.163.com/liangge_sky/blog/static/210500188201102031733245/

作者:xingoo

出處:http://www.cnblogs.com/xing901022

本文版權歸作者和部落格園共有。歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接!