现在的位置: 首页 > 综合 > 正文

Tomcat配置技巧Top 10 (2)

2013年07月18日 ⁄ 综合 ⁄ 共 4013字 ⁄ 字号 评论关闭
4.配置虚拟主机(Virtual Hosts)

关于server.xml中“Host”这个元素,只有在你设置虚拟主机的才需要修改。虚拟主机是一种在一个web服务器上服务多个域名的机制,对每个域名而言,都好象独享了整个主机。实际上,大多数的小型商务网站都是采用虚拟主机实现的,这主要是因为虚拟主机能直接连接到Internet并提供相应的带宽,以保障合理的访问响应速度,另外虚拟主机还能提供一个稳定的固定IP。

    基于名字的虚拟主机可以被建立在任何web服务器上,建立的方法就是通过在域名服务器(DNS)上建立IP地址的别名,并且告诉web服务器把去往不同域名的请求分发到相应的网页目录。因为这篇文章主要是讲Tomcat,我们不准备介绍在各种操作系统上设置DNS的方法,如果你在这方面需要帮助,请参考《DNS and Bind》一书,作者是Paul Albitz and Cricket Liu (O'Reilly)。为了示范方便,我将使用一个静态的主机文件,因为这是测试别名最简单的方法。

    在Tomcat中使用虚拟主机,你需要设置DNS或主机数据。为了测试,为本地IP设置一个IP别名就足够了,接下来,你需要在server.xml中添加几行内容,如下:


<Server port="8005" shutdown="SHUTDOWN" debug="0"> 
<Service name="Tomcat-Standalone"> 
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" 
port="8080" minProcessors="5" maxProcessors="75" 
enableLookups="true" redirectPort="8443"/> 
<Connector className="org.apache.coyote.tomcat4.CoyoteConnector" 
port="8443" minProcessors="5" maxProcessors="75" 
acceptCount="10" debug="0" scheme="https" secure="true"/> 
<Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory" 
clientAuth="false" protocol="TLS" /> 
</Connector> 
<Engine name="Standalone" defaultHost="localhost" debug="0"> 
<!-- This Host is the default Host --> 
<Host name="localhost" debug="0" appBase="webapps" 
unpackWARs="true" autoDeploy="true"> 
<Context path="" docBase="ROOT" debug="0"/> 
<Context path="/orders" docBase="/home/ian/orders" debug="0" 
reloadable="true" crossContext="true"> 
</Context> 
</Host> 

<!-- This Host is the first "Virtual Host": http://www.example.com/ --> 
<Host name="www.example.com" appBase="/home/example/webapp"> 
<Context path="" docBase="."/> 
</Host> 

</Engine> 
</Service> 
</Server>

    Tomcat的server.xml文件,在初始状态下,只包括一个虚拟主机,但是它容易被扩充到支持多个虚拟主机。在前面的例子中展示的是一个简单的server.xml版本,其中粗体部分就是用于添加一个虚拟主机。每一个Host元素必须包括一个或多个context元素,所包含的context元素中必须有一个是默认的context,这个默认的context的显示路径应该为空(例如,path=””)。

    5.配置基础验证(Basic Authentication)

    容器管理验证方法控制着当用户访问受保护的web应用资源时,如何进行用户的身份鉴别。当一个web应用使用了Basic Authentication(BASIC参数在web.xml文件中auto-method元素中设置),而有用户访问受保护的web应用时,Tomcat将通过HTTP Basic Authentication方式,弹出一个对话框,要求用户输入用户名和密码。在这种验证方法中,所有密码将被以64位的编码方式在网络上传输。

    注意:使用Basic Authentication通过被认为是不安全的,因为它没有强健的加密方法,除非在客户端和服务器端都使用HTTPS或者其他密码加密码方式(比如,在一个虚拟私人网络中)。若没有额外的加密方法,网络管理员将能够截获(或滥用)用户的密码。但是,如果你是刚开始使用Tomcat,或者你想在你的web应用中测试一下基于容器的安全管理,Basic Authentication还是非常易于设置和使用的。只需要添加两个元素到你的web应用的web.xml文件中,并且在CATALINA_BASE/conf/tomcat-users.xml 文件中添加适当的即可,然后重新启动Tomcat。

    下面例子中的web.xml摘自一个俱乐部会员网站系统,该系统中只有member目录被保护起来,并使用Basic Authentication进行身份验证。请注意,这种方式将有效的代替Apache web服务器中的.htaccess文件。


<!-- 
Define the Members-only area, by defining 
a "Security Constraint" on this Application, and 
mapping it to the subdirectory (URL) that we want 
to restrict. 
--> 
<security-constraint> 
<web-resource-collection> 
<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中的中),这比自定义的验证方式强,Tomcat内置的的验证方式包括basic、digest、form和client-cert。
    5> 如果你使用单点登录,还希望集成一个第三方的web应用到你的网站中来,并且这个新的web应用使用它自己的验证方式,而不使用容器管理安全,那你基本上就没招了。你的用户每次登录原来所有应用时需要登录一次,并且在请求新的第三方应用时还得再登录一次。当然,如果你拥有这个第三方web应用的源码,而你又是一个程序员,你可以修改它,但那恐怕也不容易做。
    6> 单点登录需要使用cookies。

<<上一页 1 2 3 下一页>>

抱歉!评论已关闭.