在 NetBeans IDE 中保护 Web 应用程序的安全
编写人:Dan Kolar,维护人:James Branam 和 Jeff Rubinoff
本文档介绍在部署到 Tomcat 或 GlassFish 服务器的 Web 应用程序中添加安全功能的基础知识。
本文档介绍了如何使用基本登录窗口以及 Web 页中的登录表单配置安全验证。本文档指导您完成在 Tomcat 和 GlassFish 服务器上创建用户的步骤。创建用户之后,然后可以通过在部署描述符中设置安全属性创建安全角色。本文档还介绍了在将应用程序部署到 GlassFish 服务器时如何使用 JDBC 验证保护应用程序的安全。
预计时间:40 分钟
目录
要学习本教程,您需要具备以下软件和资源。
| NetBeans IDE |
Java EE 版本 |
| Java Developer Kit (JDK) |
版本 6 或 7 |
| Java EE 平台 |
Java EE 5 或 6
|
| Travel 数据库 |
无版本要求 |
| 符合 Java EE 规范的 Web 服务器或应用服务器 |
Tomcat Web Server 7.x 和/或
GlassFish Server Open Source Edition 3.1
|
安装和配置工作环境
安装并启动 NetBeans IDE。您可以使用捆绑的 Tomcat Server 或 GlassFish Server 完成本教程。
请确保安装了服务器并在 IDE 中注册了服务器实例。可以使用服务器管理器来注册安装的服务器实例。(选择“工具”>“服务器”>“添加服务器”。选择“GlassFish Server <版本号>”或“Tomcat <版本号>”,然后单击“下一步”。单击“浏览”并找到该应用服务器的安装目录。单击“完成”。)
创建 Web 应用程序
在本练习中,您首先将创建 Web 应用程序项目和目录结构。然后在每个安全目录中创建一些简单的 html 文件。Web 应用程序使用基本登录验证来访问安全目录。如果希望使用登录表单进行验证,则可以向表单添加 jsp 页。
创建安全目录
- 选择“文件”>“新建项目 (Ctrl-Shift-N)”,从 "Web" 类别中选择“Java Web 应用程序”,然后单击“下一步”。
- 将项目命名为 WebApplicationSecurity。接受缺省设置。
- (可选)选中“使用专用文件夹存储库”复选框,并指定库文件夹的位置。有关此选项的详细信息,请参见共享项目库。
- 单击“下一步”。
- 选择要在其中部署应用程序的服务器。这里仅列出了已在 IDE 中注册的服务器。单击“下一步”。
- 不需要添加框架,因此请单击“完成”。
- 如果创建了一个 EE 6 应用程序,请转到 IDE 的“项目”窗口,右键单击该项目的节点,然后选择“新建”>“其他”> "Web" >“标准部署描述符 (web.xml)”。接受所有缺省值,然后单击相应的按钮以完成向导。
注意:本教程介绍了如何在部署描述符中配置安全功能,但 EE 6 应用程序缺省使用标注,而不是部署描述符。
- 在 IDE 的“项目”窗口中,右键单击“Web 页”,然后选择“新建”>“其他”。
- 在“新建文件”向导中,选择“其他”作为“类别”,选择“文件夹”作为“文件类型”。单击“下一步”。
-
在“新建文件夹”向导中,将文件夹命名为 "secureAdmin",然后单击“完成”。
secureAdmin 文件夹将显示在“项目”窗口的“Web 页”文件夹中。
- 重复前面的三个步骤以创建另一个名为 "secureUser" 的文件夹。
- 在 secureUser 文件夹中创建一个新的 html 文件,方法是在“项目”窗口中右键单击 secureUser 文件夹,然后选择“新建”> "HTML"。
- 将新文件命名为 "pageU",然后单击“完成”。
单击“完成”后,将在源代码编辑器中打开 pageU.html 文件。
- 在源代码编辑器中,将 pageU.html 中的现有代码替换为以下代码:
<html>
<head>
<title>User secure area</title>
</head>
<body>
<h1>User Secure Area</h1>
</body>
</html>
- 右键单击 secureAdmin 文件夹并创建一个新的名为 pageA 的 html 文件。
- 在源代码编辑器中,将 pageA.html 中的现有代码替换为以下代码:
<html>
<head>
<title>Admin secure area</title>
</head>
<body>
<h1>Admin secure area</h1>
</body>
</html>
创建 JSP 索引页
现在可以创建包含指向安全区域的链接的 JSP 索引页。当用户单击链接时,系统将提示他们输入用户名和口令。如果使用的是基本登录,将使用缺省浏览器登录窗口进行提示。如果使用的是登录表单页,则用户将在一个表单中输入用户名和口令。
- 在源代码编辑器中打开 index.jsp,并将以下链接添加到 pageA.html 和 pageU.html:
<p>Request a secure Admin page <a href="secureAdmin/pageA.html">here!</a></p>
<p>Request a secure User page <a href="secureUser/pageU.html" >here!</a></p>
- 保存所做的更改。
创建登录表单(对于 Tomcat 是必需的,对于 GlassFish 服务器是可选的)
如果希望使用登录表单而不使用基本登录,则可以创建一个包含表单的 jsp 页。然后在配置登录方法时指定登录页和错误页。
重要说明:Tomcat 用户必须创建登录表单。
- 在“项目”窗口中,右键单击“Web 页”文件夹并选择“新建”> "JSP"。
- 将文件命名为 login,保留其他字段的缺省值,然后单击“完成”。
- 在源代码编辑器中,将以下代码插入到 login.jsp 的 <body> 标记之间。
<form action="j_security_check" method="POST">
Username:<input type="text" name="j_username"><br>
Password:<input type="password" name="j_password">
<input type="submit" value="Login">
</form>
- 在“Web 页”文件夹中创建一个新的名为 loginError.html 的 html 文件。这是一个简单的错误页。
- 在源代码编辑器中,将 loginError.html 中的现有代码替换为以下代码:
<html>
<head>
<title>Login Test: Error logging in</title>
</head>
<body>
<h1>Error Logging In</h1>
<br/>
</body>
</html>
在目标服务器上创建用户
要能够在 Web 应用程序中使用用户/口令验证(基本登录或基于表单的登录)安全功能,必须为目标服务器定义用户及其相应角色。要登录到服务器,该服务器上必须存在用户帐户。
定义用户和角色的方式因指定的目标服务器而异。在本教程中,将使用 admin 和 user 用户测试安全设置。您需要确认在相应的服务器上存在这些用户,并为这些用户分配了相应的角色。
在 GlassFish Server 上定义用户
对于本方案,您需要先使用 GlassFish Server 管理控制台创建两个名为 user 和 admin 的新用户。名为 user 的用户具有有限的应用程序访问权限,名为 admin 的用户具有管理权限。然后,您需要修改 glassfish-web.xml 以将这些用户映射到相应的角色。glassfish-web.xml 文件位于项目的“配置文件”目录中。
注意:如果使用的 GlassFish Server 版本低于 3.1,则配置文件命名为 sun-web.xml。
-
转到 IDE 的“服务”窗口,然后右键单击“服务器”>“GlassFish 服务器”>“查看管理控制台”以打开管理控制台。将在浏览器窗口中打开 GlassFish 服务器的登录页。您需要使用管理员用户名和口令进行登录才能访问管理控制台。
注意:必须运行应用服务器才能访问管理控制台。要启动服务器,请右键单击“GlassFish 服务器”节点,然后选择“启动”。
- 在管理控制台中,导航到“配置”> "server-donfig" >“安全性”>“领域”> "File"。将打开“编辑领域”面板。

- 在“编辑领域”面板的顶部,单击“管理用户”按钮。将打开“File 用户”面板。
- 单击“新建”。将打开“新建 File 领域用户”面板。键入 user 作为用户 ID,然后键入 userpw 作为口令。单击“确定”。
- 按照前面的步骤,在 file 领域中创建名为 admin 的用户(口令为 adminpw)。
在 Tomcat Web Server 上定义角色和用户
对于 Tomcat 7,在 NetBeans IDE 中注册服务器时,将创建一个具有 manager-script 角色的用户,并为该用户创建一个口令。
Tomcat 服务器的基本用户和角色是在 tomcat-users.xml 中定义的。可以在 <CATALINA_BASE>\conf 目录中找到 tomcat-users.xml。
注意:可以在“服务”窗口中右键单击 Tomcat 服务器节点,然后选择“属性”以查找 CATALINA_BASE 位置。将打开“服务器属性”。CATALINA_BASE 位置显示在“连接”标签中。
注意:如果使用早期版本的 IDE 捆绑的 Tomcat 6,该服务器将定义具有口令以及 administrator 和 manager 角色的 ide 用户。ide 用户的口令是在安装 Tomcat 6 时生成的。可以更改用户 ide 的口令,或者将该口令复制到 tomcat-users.xml 中。
在 Tomcat 中添加用户:
- 在编辑器中打开 <CATALINA_BASE>/conf/tomcat-users.xml。
- 添加一个名为 AdminRole 的角色。
<role rolename="AdminRole"/>
- 添加一个名为 UserRole 的角色。
<role rolename="UserRole"/>
- 添加一个名为 admin 并具有 adminpw 口令和 AdminRole 角色的用户。
<user username="admin" password="adminpw" role="AdminRole"/>
- 添加一个名为 user 并具有 userpw 口令和 UserRole 角色的用户。
<user username="user" password="userpw" role="UserRole"/>
tomcat-users.xml 文件现在如下所示:
<tomcat-users>
<!--
<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"/>
-->
...
<role rolename="AdminRole"/>
<role rolename="UserRole"/>
<user username="user" password="userpw" roles="user"/>
<user username="admin" password="adminpw" roles="AdminRole"/>
[User with manager-script role, defined when Tomcat 7 was registered with the IDE]
...
</tomcat-users>
配置登录方法
在为应用程序配置登录方法时,可以使用浏览器提供的登录窗口进行基本登录验证。另外,还可以创建具有登录表单的 Web 页。这两种登录配置都是基于用户/口令验证的。
通过配置 web.xml,可以为应用程序配置登录方法。可以在“项目”窗口的“配置文件”目录中找到 web.xml 文件。
基本登录
在使用基本登录配置时,登录窗口由浏览器提供。访问安全内容需要有效的用户名和口令。
以下步骤介绍了如何为 GlassFish 服务器配置基本登录。Tomcat 用户需要使用登录表单。
- 在“项目”窗口中,双击位于“配置文件”目录中的 web.xml,该文件在可视编辑器中打开。
- 单击工具栏中的“安全”,在“安全”视图中打开该文件。
- 展开“登录配置”节点并将“登录配置”设置为“基本”。
注意:如果要使用表单,请选择“表单”而不是“基本”,然后指定登录页和登录错误页。
输入 file 作为“域名称”。这与在 GlassFish 服务器上创建用户的领域名称相对应。

- 展开“安全角色”节点,并单击“添加”以添加角色名称。
- 添加以下安全角色:
- AdminRole。添加到此角色的用户将有权访问服务器的 secureAdmin 目录。
- UserRole。添加到此角色的用户将有权访问服务器的 secureUser 目录。
注意:GlassFish 角色名称必须以大写字母开头。
- 通过执行以下操作,创建和配置名为 AdminConstraint 的安全约束:
- 单击“添加安全约束”。将显示新安全约束的部分。
- 输入 AdminConstraint 作为新安全约束的“显示名称”。

- 单击“添加”。将打开“增加 Web 资源”对话框。
在“增加 Web 资源”对话框中,将“资源名称”设置为 Admin,将“URL 模式”设置为 /secureAdmin/*,然后单击“确定”。将关闭该对话框。
注意:如果使用星号 (*),则会授予用户访问该文件夹中所有文件的权限。

- 选中“启用验证约束”,然后单击“编辑”。将打开“编辑角色名称”对话框。
- 在“编辑角色名称”对话框中,在左窗格中选择 "AdminRole",单击“添加”,然后单击“确定”。
在完成上述步骤之后,结果应如下图所示:

- 通过执行以下操作,创建和配置名为 UserConstraint 的安全约束:
- 单击“添加安全约束”,创建新的安全约束。
- 输入 UserConstraint 作为新安全约束的“显示名称”。
- 单击“添加”,添加“Web 资源集合”。
- 在“增加 Web 资源”对话框中,将“资源名称”设置为 User,将 URL 模式设置为 /secureUser/*,然后单击“确定”。
- 选中“启用验证约束”,然后单击“编辑”以编辑“角色名称”字段。
- 在“编辑角色名称”对话框中,在左窗格中选择 "AdminRole" 和 "UserRole",单击“添加”,然后单击“确定”。
注意:还可以在 web.xml 中设置会话的超时时间。要设置超时,请单击可视编辑器的“常规”标签,然后指定希望会话持续的时间。缺省值为 30 分钟。
表单登录
使用表单进行登录可以定制登录页和错误页的内容。使用表单配置验证的步骤与基本登录配置相同,但需要指定您创建的登录页和错误页。
以下步骤说明了如何配置登录表单:
- 在“项目”窗口中,双击位于 Web 页/WEB-INF 目录中的 web.xml,在可视编辑器中打开该文件。
- 单击工具栏中的“安全”,在“安全”视图中打开该文件,并展开“登录配置”节点。
- 将“登录配置”设置为“表单”。
- 通过单击“浏览”并找到 login.jsp 设置“表单登录页”。
-
通过单击“浏览”并找到 loginError.html 设置“表单错误页”。
- GlassFish 用户:输入 file 作为领域名称。这与在 GlassFish 服务器上创建用户的领域名称相对应。Tomcat 用户不输入领域名称。
- 展开“安全角色”节点,并单击“添加”以添加角色名称。
- 添加以下安全角色:
| AdminRole |
添加到此角色的用户有权访问服务器的 secureAdmin 目录。 |
| UserRole |
添加到此角色的用户有权访问服务器的 secureUser 目录。 |
- 通过执行以下操作,创建和配置名为 AdminConstraint 的安全约束:
- 单击“添加安全约束”,创建新的安全约束。
- 输入 AdminConstraint 作为新安全约束的“显示名称”。
- 单击“添加”,添加“Web 资源集合”。
-
在“增加 Web 资源”对话框中,将“资源名称”设置为 Admin,将“URL 模式”设置为 /secureAdmin/*,然后单击“确定”。
注意:如果使用星号 (*),则会授予用户访问该文件夹中所有文件的权限。

- 选中“启用验证约束”,然后单击“编辑”。将打开“编辑角色名称”对话框。
- 在“编辑角色名称”对话框中,在左窗格中选择 "AdminRole",单击“添加”,然后单击“确定”。
在完成上述步骤之后,结果应如下图所示:

- 通过执行以下操作,创建和配置名为 UserConstraint 的安全约束:
- 单击“添加安全约束”,创建新的安全约束。
- 输入 UserConstraint 作为新安全约束的“显示名称”。
- 单击“添加”,添加“Web 资源集合”。
- 在“增加 Web 资源”对话框中,将“资源名称”设置为 User,将 URL 模式设置为 /secureUser/*,然后单击“确定”。
- 选中“启用验证约束”,然后单击“编辑”以编辑“角色名称”字段。
- 在“编辑角色名称”对话框中,在左窗格中选择 "AdminRole" 和 "UserRole",单击“添加”,然后单击“确定”。
注意:还可以在 web.xml 中设置会话的超时时间。要设置超时,请单击可视编辑器的“常规”标签,然后指定希望会话持续的时间。缺省值为 30 分钟。
配置安全部署描述符
如果将应用程序部署到 GlassFish 服务器中,则需要在 glassfish-web.xml 中配置安全部署描述符以映射 web.xml 中定义的安全角色。请注意,在 web.xml 中输入的值将显示在 glassfish-web.xml 中。glassfish-web.xml 从 web.xml 中提取这些值。
- 双击位于“项目”窗口的“配置文件”目录中的 glassfish-web.xml。
注意:对于低于 3.1 的 GlassFish Server 版本,该文件命名为 sun-web.xml。
- 选择“安全”标签以显示安全角色。
- 选择 AdminRole 安全角色节点以打开“安全角色映射”窗格。
单击“添加主要用户”,并为主要用户名称输入 admin。单击“确定”。

- 选择 UserRole 安全角色节点以打开“安全角色映射”窗格。
- 单击“添加主要用户”,并为主要用户名称输入 user。单击“确定”。
- 保存对 glassfish-web.xml 的更改。
也可以通过单击位于 Sun Web 应用程序可视编辑器右上角的“作为 XML 进行编辑”,在 XML 编辑器中查看和编辑 glassfish-web.xml。如果在 XML 编辑器中打开 glassfish-web.xml,则可以看到 glassfish-web.xml 具有以下安全角色映射信息:
<security-role-mapping>
<role-name>AdminRole</role-name>
<principal-name>admin</principal-name>
</security-role-mapping>
<security-role-mapping>
<role-name>UserRole</role-name>
<principal-name>user</principal-name>
</security-role-mapping>
部署并运行应用程序
在“项目”窗口中,右键单击该项目节点并选择“运行”。
注意:缺省情况下,将在启用“在保存时编译”功能的情况下创建项目,因此无需先编译代码即可在 IDE 中运行应用程序。有关“在保存时编译”功能的详细信息,请参见创建、导入和配置 Java 项目指南的“在保存时编译”部分。
在生成应用程序并将其部署到服务器之后,将在 Web 浏览器中打开起始页。通过单击 admin 或 user 选择您要访问的安全区域。
在提供用户和口令之后,共有三个可能的结果:
小结
在本教程中,您创建了一个安全 Web 应用程序。您使用 web.xml 和 glassfish-web.xml 描述符编辑器编辑了安全设置,并创建了具有安全登录和多个身份标识的 Web 页。
另请参见
本页的最新修改时间:2009 年 6 月 18 日