Tomcat学习--配置tomcat

1.重定向web应用

  tomcat提供统一的配置文件%CATALINA%\conf\server.xml。在该文件配置信息会在整个tomcat部属的所有应用上生效,但同时它也带来一个问题,就是如果有进行tomcat版本的更新可能导致相应的server.xml配置信息被覆盖。如何做到当前tomcat配置对所有部属在此之上的应用配置相同,但又不会因为更新tomcat等原因导致配置信息被覆盖呢?答案就是CATALINA_BASE环境变量。Tomcat在部属应用时会按照%CATALINA_BASE%\conf下的配置文件启动%CATALINA_HOME%下的tomcat应用。例如:

mkdir  tomcatAppOne
cp -a $CATALINA_HOME\conf  .

创建tomcatAppOne目录,将tomcat安装目录下conf文件夹全部复制到tomcatAppOne下。

随后,配置tomcatAppOne/conf/server.xml文件。例如将访问端口设置到8081

    <Connector port="8081" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

 随后,启设置CATALINA_BASE环境变量并启动tomcat

set CATALINA_BASE=d:/tomcatAppOne
catalina start

在相应的启动输出信息内可以看到,当前tomcat已经使用tomcatAppOne下的server.xml配置的8081端口监听Http请求了。

2.变更Http监听端口8080为80

  • tomcat默认监听HTTP请求的端口是8080,这主要 由于默认HTTP 80端口又可能被其他应用使用才故意为之。若想将其修改为默认端口,可以通过conf/server.xml文件来进行
   <Connector port="80" protocol="HTTP/1.1" 
               connectionTimeout="20000" 
               redirectPort="8443" />

 设置完毕后启动应用,tomcat这会监听80端口的HTTP请求。

  • 不过设置80端口有一个缺点,就是想要开启80端口,用户必须具有root权限(端口号小于1024的,开启都需要具有root权限)。如果用户没有root权限,则可以通过设置iptables来进行,具体命令如下
iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
iptables -t nat -I OUTPUT -p tcp --dport 80 -j REDIRECT --to-ports 8080

这两句命令的主要作用就是将所有http 80端口连接都重定向到8080端口,此外,还需要设置server.xml

<Connector port="8080" protocol="HTTP/1.1"  proxyPort=80
               connectionTimeout="20000" 
               redirectPort="8443" />

启动tomcat,此时所有80端口的http连接都将有8080端口来处理了。

3.变更tomcat内置的jsp编译器

  tomcat 5.5及以上版本默认的使用内置的Eclipse JDT编译器来编译jsp.Eclipse JDT的作用与JDK提供的javac功能上是一致的。但这两者之间还是存在一个区别:Eclipse JDT由于发布时间的关系,可能对java最新的一些特性并不完全支持。因此,某些情况下希望将tomcat内置的JDT编译器替换成jdk的javac。在tomcat 5.5及以上版本提供两种编译器选择:

  1. 内置默认的eclipse JDT编译器
  2. 使用Apache Ant来编译jsp,由于Ant默认采用JDK's JAVAC编译器,因此采用ANT编译jsp就等同于采用JAVAC

如果希望采用ANT来替换JDT,具体的步骤如下:

  1. 删除CATALINA_HOME\common\lib\jasper-compiler-jdt.jar文件
  2. 将Ant下的ant.jar复制到common\lib下
  3. 将jdk下的tool.jar复制到common\lib下

操作完上述步骤后,启动tomcat,这当前将不在使用JDT而是ANT来编译jsp了。

4.安全性(Security)

  tomcat通过server.xml下的Realm与web.xml的<security-constraint>来限制用于对tomcat内资源的访问。

  • Realms

  简单地讲,Realm就是用户,密码及角色所组成的配置信息。Tomcat提供四种不同Realm:

  1.UserDatabaseRealm

  UserDatabaseRealm通过加载配置在静态文件的信息来控制资源访问,该方式只会在tomcata启动时刻加载,因此无法在tomcat运行期间动态修改。tomcat提供conf/tomcat-users.xml来配置用户,密码,角色之间的关系

<tomcat-users>
<!--
  NOTE:  By default, no user is included in the "manager" role required
  to operate the "/manager" web application.  If you wish to use this app,
  you must define such a user - the username and password are arbitrary.
-->
<!--
  NOTE:  The sample user and role entries below are wrapped in a comment
  and thus are ignored when reading this file. Do not forget to remove
  <!.. ..> that surrounds them.
-->

  <role rolename="tomcat"/>
  <role rolename="role1"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="both" password="tomcat" roles="tomcat,role1"/>
  <user username="role1" password="tomcat" roles="role1"/>

</tomcat-users>

 通过在server.xml配置对应的UserDatabaseRealm来载入上述文件

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

    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"/>

由于UserDatabaseRealm无法在运行时修改及明文存放密码等缘故,现实中使用该方式的应用较少。

  2.JDBCRealm

  JDBCRealm主要通过数据库来存储用户,密码和角色关系,相对UserDatabaseRealm,好处在于可以运行时修改。

<Realm class="org.apache.catalina.realm.JDBCRealm"
            driverName="com.mysql.jdbc.Driver"
            connectionUrl="jdbc:mysql://localhost/yy"
            connectionName="xxx"
            connectionPassword="1111"
            userTable="users"  userCredCol="passwd"
            userRoleTable="roles"  roleNameCol="role"
            userNameCol="name" />

通过制定用户,密码和角色相关表单,来设置访问控制。JDBCRealm虽然可以动态修改,但是由于数据库连接信息仍然是以明文形式存储,因此安全性方面还是不足

  3.JNDIRealm

  通过LDAP方式来设置控制信息.

  4.JAASRealm

  通过使用Java Authentication and Authorization Service来配置控制信息。

配置完毕Realm后,还需要在web.xml配置相应的<security-constraint>才能起到控制作用。例如:

<security-constraint>
  <web-resource-collection>
        <web-resource-name>
               AAA
        </web-resource-name>
        <url-pattern>/member/*</url-pattern>
   </web-resource-collection>
   <auth-constraint>
       <role-name>member</role-name>
   </auth-constraint>
</security-constraint>

<login-config>
   <auth-method>BASIC</auth-method>
   <realm-name>mmm<realm-name>
</login-config>
  • Authentication

  Tomcat提供四种级别的安全性认证方式:

  1.Basic authentication

  认证的用户名及密码通过明文传输。设置方式

<login-config>
   <auth-method>BASIC</auth-method>
   <realm-name>mmm<realm-name>
</login-config>

  2.Digest authentication

  认证信息采用信息摘要方式传输,可使用MD5,SHA等摘要算法。设置如下

<login-config>
   <auth-method>DIGEST</auth-method>
   <realm-name>mmm<realm-name>
</login-config>

  server.xml中定义的Realm设置摘要算法

<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
             resourceName="UserDatabase"   digest="MD5"  />

  3.Form Authentication

  通过表单提交认证信息

<login-config>
   <auth-method>FORM</auth-method>
   <realm-name>mmm<realm-name>
   <form-login-config>
      <form-login-page>/login.html</form-login-page>
      <form-error-page>/error.html</form-error-page>
   </form-login-config>
</login-config>

  4.Client-cert Authentication

  使用client-cert认证,当前连接必须采用HTTPS.

  • Single Sign-On

  如果希望在访问资源尽可能的减少相同角色的密码输入,则可以通过在server.xml配置Single Sign-On来实现

<Valve className="org.apache.catalina.authenticator.SingleSignOn" />

  

  5.Session管理

  tomcat提供2种session持久化设置:

  1. StandardManager:默认,只有当tomcat正常推出时才会执行保存session到catalina_home/work/catalina/hostname/webapp-name/的session.ser文件内
  2. PersistenManager: 能实时保存session到指定的文件或者JDBC数据库中。

  此外,tomcat还提供通过web.xml配置session的过期时间(单位:分)

 <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

  

 

 

 

 

posted @ 2012-02-29 00:52  蜗牛的天下  阅读(3117)  评论(0编辑  收藏  举报