?? tomcat配置技巧(轉載).txt
字號:
<web-resource-name>
Entire Application
</web-resource-name>
<url-pattern>/members/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>member</role-name>
</auth-constraint>
</security-constraint>
<!-- Define the Login Configuration for this Application -->
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>My Club Members-only Area</realm-name>
</login-config>
6.配置單點登錄(Single Sign-On)
一旦你設置了realm和驗證的方法,你就需要進行實際的用戶登錄處理。一般說來,對用戶而言登錄系統是一件很麻煩的事情,你必須盡量減少用戶登錄驗證的次數。作為缺省的情況,當用戶第一次請求受保護的資源時,每一個web應用都會要求用戶登錄。如果你運行了多個web應用,并且每個應用都需要進行單獨的用戶驗證,那這看起來就有點像你在與你的用戶搏斗。用戶們不知道怎樣才能把多個分離的應用整合成一個單獨的系統,所有他們也就不知道他們需要訪問多少個不同的應用,只是很迷惑,為什么總要不停的登錄。
Tomcat 4的“single sign-on”特性允許用戶在訪問同一虛擬主機下所有web應用時,只需登錄一次。為了使用這個功能,你只需要在Host上添加一個SingleSignOn Valve元素即可,如下所示:
<Valve className="org.apache.catalina.authenticator.SingleSignOn"
debug="0"/>
在Tomcat初始安裝后,server.xml的注釋里面包括SingleSignOn Valve配置的例子,你只需要去掉注釋,即可使用。那么,任何用戶只要登錄過一個應用,則對于同一虛擬主機下的所有應用同樣有效。
使用single sign-on valve有一些重要的限制:
1> value必須被配置和嵌套在相同的Host元素里,并且所有需要進行單點驗證的web應用(必須通過context元素定義)都位于該Host下。
2> 包括共享用戶信息的realm必須被設置在同一級Host中或者嵌套之外。
3> 不能被context中的realm覆蓋。
4> 使用單點登錄的web應用最好使用一個Tomcat的內置的驗證方式(被定義在web.xml中的<auth-method>中),這比自定義的驗證方式強,Tomcat內置的的驗證方式包括basic、digest、form和client-cert。
5> 如果你使用單點登錄,還希望集成一個第三方的web應用到你的網站中來,并且這個新的web應用使用它自己的驗證方式,而不使用容器管理安全,那你基本上就沒招了。你的用戶每次登錄原來所有應用時需要登錄一次,并且在請求新的第三方應用時還得再登錄一次。當然,如果你擁有這個第三方web應用的源碼,而你又是一個程序員,你可以修改它,但那恐怕也不容易做。
6> 單點登錄需要使用cookies。
7.配置用戶定制目錄(Customized User Directores)
一些站點允許個別用戶在服務器上發布網頁。例如,一所大學的學院可能想給每一位學生一個公共區域,或者是一個ISP希望給一些web空間給他的客戶,但這又不是虛擬主機。在這種情況下,一個典型的方法就是在用戶名前面加一個特殊字符(~),作為每位用戶的網站,比如:
http://www.cs.myuniversity.edu/~username
http://members.mybigisp.com/~username
Tomcat提供兩種方法在主機上映射這些個人網站,主要使用一對特殊的Listener元素。Listener的className屬性應該是org.apache.catalina.startup.UserConfig,userClass屬性應該是幾個映射類之一。如果你的系統是Unix,它將有一個標準的/etc/passwd文件,該文件中的帳號能夠被運行中的Tomcat很容易的讀取,該文件指定了用戶的主目錄,使用PasswdUserDatabase 映射類。
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
userClass="org.apache.catalina.startup.PasswdUserDatabase"/>
web文件需要放置在像/home/users/ian/public_html 或者 /users/jbrittain/public_html一樣的目錄下面。當然你也可以改變public_html 到其他任何子目錄下。
實際上,這個用戶目錄根本不一定需要位于用戶主目錄下里面。如果你沒有一個密碼文件,但你又想把一個用戶名映射到公共的像/home一樣目錄的子目錄里面,則可以使用HomesUserDatabase類。
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html" homeBase="/home"
userClass="org.apache.catalina.startup.HomesUserDatabase"/>
這樣一來,web文件就可以位于像/home/ian/public_html 或者 /home/jasonb/public_html一樣的目錄下。這種形式對Windows而言更加有利,你可以使用一個像c:home這樣的目錄。
這些Listener元素,如果出現,則必須在Host元素里面,而不能在context元素里面,因為它們都用應用于Host本身。
8.在Tomcat中使用CGI腳本
Tomcat主要是作為Servlet/JSP容器,但它也有許多傳統web服務器的性能。支持通用網關接口(Common Gateway Interface,即CGI)就是其中之一,CGI提供一組方法在響應瀏覽器請求時運行一些擴展程序。CGI之所以被稱為通用,是因為它能在大多數程序或腳本中被調用,包括:Perl,Python,awk,Unix shell scripting等,甚至包括Java。當然,你大概不會把一個Java應用程序當作CGI來運行,畢竟這樣太過原始。一般而言,開發Servlet總要比CGI具有更好的效率,因為當用戶點擊一個鏈接或一個按鈕時,你不需要從操作系統層開始進行處理。
Tomcat包括一個可選的CGI Servlet,允許你運行遺留下來的CGI腳本。
為了使Tomcat能夠運行CGI,你必須做如下幾件事:
1. 把servlets-cgi.renametojar (在CATALINA_HOME/server/lib/目錄下)改名為servlets-cgi.jar。處理CGI的servlet應該位于Tomcat的CLASSPATH下。
2. 在Tomcat的CATALINA_BASE/conf/web.xml 文件中,把關于<servlet-name> CGI的那段的注釋去掉(默認情況下,該段位于第241行)。
3. 同樣,在Tomcat的CATALINA_BASE/conf/web.xml文件中,把關于對CGI進行映射的那段的注釋去掉(默認情況下,該段位于第299行)。注意,這段內容指定了HTML鏈接到CGI腳本的訪問方式。
4. 你可以把CGI腳本放置在WEB-INF/cgi 目錄下(注意,WEB-INF是一個安全的地方,你可以把一些不想被用戶看見或基于安全考慮不想暴露的文件放在此處),或者你也可以把CGI腳本放置在context下的其他目錄下,并為CGI Servlet調整cgiPathPrefix初始化參數。這就指定的CGI Servlet的實際位置,且不能與上一步指定的URL重名。
5. 重新啟動Tomcat,你的CGI就可以運行了。
在Tomcat中,CGI程序缺省放置在WEB-INF/cgi目錄下,正如前面所提示的那樣,WEB-INF目錄受保護的,通過客戶端的瀏覽器無法窺探到其中內容,所以對于放置含有密碼或其他敏感信息的CGI腳本而言,這是一個非常好的地方。為了兼容其他服務器,盡管你也可以把CGI腳本保存在傳統的/cgi-bin目錄,但要知道,在這些目錄中的文件有可能被網上好奇的沖浪者看到。另外,在Unix中,請確定運行Tomcat的用戶有執行CGI腳本的權限。
9.改變Tomcat中的JSP編譯器(JSP Compiler)
在Tomcat 4.1(或更高版本,大概),JSP的編譯由包含在Tomcat里面的Ant程序控制器直接執行。這聽起來有一點點奇怪,但這正是Ant有意為之的一部分,有一個API文檔指導開發者在沒有啟動一個新的JVM的情況下,使用Ant。這是使用Ant進行Java開發的一大優勢。另外,這也意味著你現在能夠在Ant中使用任何javac支持的編譯方式,這里有一個關于Apache Ant使用手冊的javac page列表。使用起來是容易的,因為你只需要在<init-param> 元素中定義一個名字叫“compiler”,并且在value中有一個支持編譯的編譯器名字,示例如下:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>
org.apache.jasper.servlet.JspServlet
</servlet-class>
<init-param>
<param-name>logVerbosityLevel</param-name>
<param-value>WARNING</param-value>
</init-param>
<init-param>
<param-name>compiler</param-name>
<param-value>jikes</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
當然,給出的編譯器必須已經安裝在你的系統中,并且CLASSPATH可能需要設置,那處決于你選擇的是何種編譯器。
10.限制特定主機訪問(Restricting Access to Specific Hosts)
有時,你可能想限制對Tomcat web應用的訪問,比如,你希望只有你指定的主機或IP地址可以訪問你的應用。這樣一來,就只有那些指定的的客戶端可以訪問服務的內容了。為了實現這種效果,Tomcat提供了兩個參數供你配置:RemoteHostValve 和RemoteAddrValve。
通過配置這兩個參數,可以讓你過濾來自請求的主機或IP地址,并允許或拒絕哪些主機/IP。與之類似的,在Apache的httpd文件里有對每個目錄的允許/拒絕指定。
例如你可以把Admin Web application設置成只允許本地訪問,設置如下:
<Context path="/path/to/secret_files" ...>
<Valve className="org.apache.catalina.valves.RemoteAddrValve"
allow="127.0.0.1" deny=""/>
</Context>
如果沒有給出允許主機的指定,那么與拒絕主機匹配的主機就會被拒絕,除此之外的都是允許的。與之類似,如果沒有給出拒絕主機的指定,那么與允許主機匹配的主機就會被允許,除此之外的都是拒絕的。
--------------------------------------
作者簡介:
Jason Brittain是CollabNet公司的一名資深軟件工程師,主要負責軟件底層架構的開發。他已經為Apache Jakarta項目做了很多貢獻,多年以來,他一直是一名積極的開源軟件開發者。
Ian F. Darwin已經在計算機行業工作了30年:從1980年開始使用Unix,從1995年開始使用Java,從1998年開始使用OpenBSD。他是兩本Oreilly圖書的作者:Checking C Programs with lint 和 Java Cookbook,還與Jason Brittain合著了Tomcat: The Definitive Guide。
本欄文章均來自于互聯網,版權歸原作者和各發布網站所有,本站收集這些文章僅供學習參考之用。任何人都不能將這些文章用于商業或者其他目的。( ProgramFan.Com )
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -