Tomcat 5.5 身份验证领域配置

来源:百度文库 编辑:神马文学网 时间:2024/04/25 11:43:28

关于示例应用程序

我们迁移的示例应用程序是使用 Web 层组件创建的 General Store 应用程序,Web 层组件包括:

  • JSP
  • servlet
  • JSP 标准标记库(JSP Standard Tag Library,JSTL)

该应用程序使用模型-视图-控制器(Model-View-Controller,MVC)的体系结构来路由请求,并且全部是无脚本(JSP 页面内没有嵌入式 Java 代码)的。

作为 Tomcat 5.5 应用程序,它还使用下面的 Tomcat 的特定功能:

  • 对用户进行身份验证的缺省的 Tomcat UserRealm。
  • 查找连接到外部 Derby 数据库的 JDBC 数据源的 JNDI。

图 2 演示了该应用程序的一般体系结构。


图 2. General Store 示例应用程序

在图 2 中,所有传入请求都被发送到控制器(MVC 体系结构)Servlet。该 Servlet 根据传入请求的参数将请求发送到两个 JSP页面中的某一个页面。最初,请求被发送到显示产品目录的 generalstore.jsp。图 3 显示了 General Store应用程序的产品目录页面。


图 3. 应用程序目录页面

当您单击某个 BUY 超链接时,控制器会将请求发送到 checkoutcart.jsp 页面,该页面使您能够将多个项添加到购物车,清除购物车,或返回到购物。

generalstore.jsp 和 checkoutcart.jsp 都大量使用 JSTL 生成交互式购物车脚本;没有使用嵌入式 Java 代码。

名为 GerneralStore 的类具有一个方法,通过该方法,可以获得目录以及每个目录中的产品列表。在生产场景中,该类的实现可以连接到外部 RDBMS 以获得它们的数据。在本例中,为了保持简单实现具有硬编码的目录和产品信息。

要通过 JDBC 访问外部 RDBMS,checkoutcart.jsp 页面使用 RDBMS 获取今天的促销消息并将该消息显示给购物者。

本文的下载 ZIP 文件提供了组成示例应用程序的文件。表 2 概括介绍了组成应用程序的类和文件,并描述了它们的用途。

表 2. General Store 示例应用程序中的文件 文件描述generalstore.jsp向用户呈现目录。checkoutcart.jsp向用户呈现购物车。将通过数据源(使用 JNDI 查找)访问 RDBMS 以显示促销消息。generalstore.css两个 JSP 页面所使用的用来格式化 HTML 元素的样式表。StoreController.java将请求发送到 JSP 的主控制器。还可以获得目录和产品信息,并将这些信息作为 JSP 的属性附加以进行显示。GeneralStore.java包含返回应用程序所需的数据的方法。还包含实现自定义标记库的功能(请参阅 generalstore-taglib.tld)。 Category.java
Proudct.java
LineItem.java
当数据在应用程序的模型和视图之间传送时,JavaBean 用于保存值。generalstore-taglib.tld实现为 GeneralStore.java 的方法的自定义标记库,这些方法用于 JSP。

要使用该示例应用程序,您必须下载以下应用程序并将它们安装到您的环境中:

  • Apache Ant 1.6.5
  • Apache Derby 10.1.10.




回页首

部署到 Tomcat 5.5 环境

通过转到代码目录并键入下面的命令,您可以构建示例应用程序:

ant war

这将在 dist 目录中创建一个名为 generalstore.war 的 WAR 文件。它是可以部署到 Tomcat 5.5 的 Web 应用程序存档文件。

1. Tomcat 5.5 连接器配置

缺省情况下,Tomcat 5.5 服务器在端口 8080 侦听请求。这是通过 Tomcat 5.5 安装目录下的 conf/server.xml 配置的。清单 1 显示了配置连接器的 server.xml 代码段。

清单1.server.xml 中的 Tomcat 连接器配置


...


...

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />

如果您需要更改端口,则执行以下操作:

  1. 关闭服务器。
  2. port="8080" 更改为上面的 server.xml 代码段中需要的端口。
  3. 再次启动服务器。

2. Tomcat 5.5 身份验证领域配置

在Tomcat 中,领域维护用户、组和密码信息。缺省情况下,UserDatabaseRealm 在 Tomcat 5.5中进行了配置,从而使您能够让用户在访问杂货店前对他们进行身份验证。此领域在 server.xml 文件中也进行了设置。清单 2 中的server.xml 代码段的粗体行表示该身份验证领域的配置。

清单 2. server.xml 中的 Tomcat UserDatabaseRealm 配置


...

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


...

...

...
resourceName="UserDatabase"/>
...

上面的配置对 UserDatabaseRealm 进行设置,以使用 conf/tomcat-users.xml下面的文件维护用户、密码和角色信息。由于该领域是在 级配置的,因此它可以用于运行在 Tomcat引擎上的所有主机。

要运行我们的应用程序,您不需要对 conf/server.xml文件进行任何修改,因为缺省配置将为我们修改。然而,您需要对 conf/tomcat-users.xml 文件进行一些更改,其中UserDatabaseRealm 保留所有用户信息。对 tomcat-users.xml 文件进行清单 3 中以粗体表示的更改。

清单 3. 在 tomcat-users.xml 中为 tomcat 用户添加管理和管理员角色









这分配tomcat 用户(密码为“tomcat”)角色为管理员和管理组的一部分。

在应用程序的 web.xml 文件中,存储的控制器受到保护,并且它只对具有 admin 角色的用户授予访问权限。清单 4 中的粗体行显示了保护应用程序的 web.xml 代码(在代码分配的 dd 目录中)。

清单 4. 对应用程序进行身份验证访问保护的 web.xml 部署描述符

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

IBM Community Edition 1.0 Example

IBM Community Edition 1.0 General Store Example


GeneralStore
com.ibm.wasce.store.StoreController


GeneralStore
/store.cgi

...

General Store Security Constraint

Entire store
*.cgi


admin




BASIC
Shopping Realm



admin

...


以上代码中的 元素是标准的 J2EE安全性配置元素,并且在容器之间是可移植的。因此,未改变的 web.xml 稍后可以在 Community Edition环境中工作。然而,您在 Tomcat 中部署和使用应用程序之前,应该设置该应用程序要访问的 Derby RDBMS。

3. 设置 Derby 网络服务器

首先,请确保包装 Apache Derby 10.1。将 DERBY_INSTALL 环境变量设置为 Derby 安装目录,并确保 CLASSPATH 环境变量中包含下列元素:

  • lib/derby.jar
  • lib/derbytools.jar
  • lib/derbynet.jar
  • lib/derbyclient.jar

在源代码分配中,提供的 sp.bat 文件可用于设置这些变量。如果您使用该批处理文件,请确保首先对其进行修改,以反映您自己实际的 Derby 安装目录。然后,您可以使用以下命令在控制台窗口中启动 Derby 网络服务器:

java org.apache.derby.drda.NetworkServerControl start

Derby 服务器启动并在缺省端口 1527 进行侦听。

接下来,创建要使用的数据库。数据库名为 generalstore,它只包含一个名为 promotions 的表。createdb1.sql 文件将执行该创建并填充数据库。

使用 ij 命令执行 SQL 脚本:

java  org.apache.derby.tools.ij  createdb1.sql

createdb1.sql 脚本包含清单 5 所示的 SQL 命令。

清单 5. createdb1.sql 脚本:创建数据库表并填充数据

connect ‘jdbc:derby://localhost/generalstore;create=true‘;
drop table promotion;
create table promotion
(id char (5) not null,
message char(40) not null,
primary key(id));
insert into promotion values (‘1‘, ‘Thank your for your order.‘);
insert into promotion values (‘2‘, ‘Have a nice day!‘);
exit;

如果您看到消息 ERROR 08001: No suitable driver,则所需的 lib/derbyclient.jar 库不在 CLASSPATH 环境变量中。

4. Tomcat 5.5 JNDI 资源引用和 JDBC 连接器

checkoutcart.jsp 页面使用 JSTL 的 SQL 支持标记访问促销数据库并输出促销消息。清单 6 显示访问 RDBMS 的代码摘录。

清单 6. 访问数据库服务器的 checkoutcart.jsp 中的 JSP 代码

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="storetags" uri="/GeneralStoreTagLibrary" %>
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
...

select * from promotion

...



${row.message}




...

JSTL 标记将通过 JNDI 查找名为 jdbc/storeDB 的数据源。该名称引用是以 J2EE标准方式在应用程序的 web.xml 部署描述符中定义的。该标准配置适用于 Tomcat 5.5 和 Community Edition。清单7 显示该配置。

清单 7. 指定 JNDI 数据源引用的 web.xml 中的元素


Derby DB connection
jdbc/storeDB
javax.sql.DataSource
Container


现在,您需要配置该引用,以匹配实际的JDBC 驱动程序和 RDBMS 连接。这是通过一种容器的特定方式完成的,对于 Tomcat 和 Community Edition来说有所不同。对于 Tomcat 5.5,可以在 META-INF/context.xml 文件(位于 dd 目录)中进行配置(清单 8)。

清单 8. 将 JNDI 资源与 Derby JDBC 连接器相关联的 Tomcat 的特定 context.xml 描述符

maxActive="100" maxIdle="30" maxWait="10000"
driverClassName="org.apache.derby.jdbc.ClientDriver"
user="APP" password="APP"
url="c"/>


此处,Derby JDBC 驱动程序org.apache.derby.jdbc.ClientDriver 用于在 URLjdbc:derby://localhost/generalstore 访问数据库。Derby 服务器具有缺省的用户“APP”和密码“APP”。

5. 使用管理器应用程序部署到 Tomcat 5.5 环境

要使用自定义设置部署应用程序 WAR 文件,请启动 Tomcat 5.5 服务器并在 Web 浏览器中指向:

http://localhost:8080/manager/html

您将被提示登录;这要使用我们先前设置的 UserDatabaseRealm。由于需要管理人员角色,因此使用用户“tomcat”和密码“tomcat”。

管理器应用程序将显示所有部署的模块。滚动到底部,此处有一个框“Deploy directory or WAR file located on server”。对于“Context path”,输入 /Shopping,而对于“WAR or Directory URL”,输入到 generalstore.war 文件的绝对路径。按下 Deploy 按钮。现在您应该看到运行于 /Shopping 上下文的 General Store 应用程序。图 4 显示成功部署后的管理器应用程序。


图 4. 使用 Tomcat 管理器成功部署应用程序

使用下面的 URL 尝试访问应用程序:

http://localhost:8080/Shopping/store.cgi