FeaturesDocs & SupportCommunityBlogsPartners

在 NetBeans IDE 6.5 中保护 Web 应用程序的安全

本文档介绍了向部署到 Tomcat 服务器或 Sun Java System Application Server 的 Web 应用程序添加安全性的基础知识。

本文档介绍了如何使用基本登录窗口以及 Web 页中的登录表单配置安全验证。本文档还介绍了在 Tomcat 服务器和 Sun Java System Application Server (GlassFish) 上创建用户的步骤。创建用户之后,然后可以通过在部署描述符中设置安全属性创建安全角色。本文档还向您介绍,在将应用程序部署到 Sun Java System Application Server (GlassFish) 时如何使用 JDBC 验证保护应用程序的安全。

预计时间:40 分钟

目录

本页上的内容适用 NetBeans IDE 6.5

要学习本教程,您需要具备以下软件和资源。

软件或资源 要求的版本
NetBeans IDE 6.5 Java 版本
Java Developer Kit (JDK) 版本 6 或版本 5
Java EE 平台 Java EE 5 或 J2EE 1.4
Travel 数据库 无版本要求
应用服务器 Tomcat 或 GlassFish V2

 

本教程中使用的表示法

<NETBEANS_HOME> - NetBeans IDE 安装目录
<APPSERVER_HOME> - Sun Java System Application Server 或 GlassFish 安装目录
<TOMCAT_HOME> - Tomcat 安装目录
<PROJECT_HOME> - 包含项目的目录

 

安装和配置工作环境

安装并启动 NetBeans IDE 6.5。您可以使用捆绑的 Tomcat 服务器或 GlassFish V2 学习本教程。

如果您使用的是 Sun Java System Application Server (GlassFish),请确保已经安装了该服务器并且在 IDE 中注册了服务器实例。可以使用服务器管理器来注册服务器实例。(选择“工具”>“服务器”>“添加服务器”。选择 "GlassFish V2",然后单击“下一步”。单击“浏览”并找到该应用服务器的安装目录。单击“完成”。)

创建 Web 应用程序

在本练习中,您首先将创建 Web 应用程序项目和目录结构。然后在每个安全目录中创建一些简单的 html 文件。Web 应用程序使用基本登录验证来访问安全目录。如果希望使用登录表单进行验证,则可以向表单添加 jsp 页。

创建安全目录

  1. 选择“文件”>“新建项目”(Ctrl-Shift-N),从 Web 类别中选择 Java Web 应用程序,然后单击“下一步”。
  2. 将项目命名为 WebApplicationSecurity。接受缺省设置。
  3. (可选)选中“使用专用文件夹存储库”复选框,并指定库文件夹的位置。有关此选项的详细信息,请参见共享项目库
  4. 单击“下一步”。
  5. 选择要在其中部署应用程序的服务器。这里仅列出了已在 IDE 中注册的服务器。单击“下一步”。
  6. 不需要添加框架,因此请单击“完成”。
  7. 在 IDE 的“项目”窗口中,右键单击“Web 页”,然后选择“新建”>“其他”。
  8. 在“新建文件”向导中,选择“其他”作为“类别”,选择“文件夹”作为“文件类型”。单击“下一步”。
  9. 在“新建文件夹”向导中,将文件夹命名为 "secureAdmin",然后单击“完成”。

    secureAdmin 文件夹将显示在“项目”窗口的“Web 页”文件夹中。
  10. 重复步骤 5、6 和 7,创建另一个名为 "secureUser" 的文件夹。
  11. 在 secureUser 文件夹中创建一个新的 html 文件,方法是在“项目”窗口中右键单击 secureUser 文件夹,然后选择“新建”> "HTML"。
  12. 将新文件命名为 "pageU",然后单击“完成”。

    单击“完成”后,将在源代码编辑器中打开 pageU.html 文件。

  13. 在源代码编辑器中,将 pageU.html 中的现有代码替换为以下代码:
    <html>
    <head>
    <title>
    User secure area</title>
    </head>
    <body>
    <h1>
    User Secure Area</h1>
    </body>
    </html>
  14. 右键单击 secureAdmin 文件夹并创建一个新的名为 pageA 的 html 文件。
  15. 在源代码编辑器中,将 pageA.html 中的现有代码替换为以下代码:
    <html>
    <head>
    <title>
    Admin secure area</title>
    </head>
    <body>
    <h1>
    Admin secure area</h1>
    </body>
    </html>

创建 JSP 索引页

现在可以创建包含指向安全区域的链接的 JSP 索引页。当用户单击链接时,系统将提示他们输入用户名和口令。如果使用的是基本登录,将使用缺省浏览器登录窗口进行提示。如果使用的是登录表单页,则用户将在一个表单中输入用户名和口令。

  1. 在源代码编辑器中打开 index.jsp,并将以下链接添加到 pageA.htmlpageU.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>
  2. 保存所做的更改。

创建登录表单(可选)

如果希望使用登录表单而不使用基本登录,则可以创建一个包含表单的 jsp 页。然后在配置登录方法时指定登录页和错误页。

  1. 在“项目”窗口中,右键单击“Web 页”文件夹并选择“新建”> "JSP"。
  2. 将文件命名为 login,保留其他字段的缺省值,然后单击“完成”。
  3. 在源代码编辑器中,将以下代码添加到 login.jsp 的顶部。
    <%@taglib uri="http://java.sun.com/jstl/core" prefix="c" %>          
  4. 在源代码编辑器中,将以下代码插入到 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>
  5. 在“Web 页”文件夹中创建一个新的名为 loginError.htmlhtml 文件。这是一个简单的错误页。
  6. 在源代码编辑器中,将 loginError.html 中的现有代码替换为以下代码:
    <html>
    <head>
    <title>
    Login Test: Error logging in</title>
    </head>
    <body>
    <h1>
    Error Logging In</h1>
    <br/>
    </body>
    </html>

在目标服务器上创建用户和角色

要能够在 Web 应用程序中使用用户/口令验证(基本登录或基于表单的登录)安全功能,必须为目标服务器定义用户及其相应角色。要登录到服务器,该服务器上必须存在用户帐户。

定义用户和角色的方式因指定的目标服务器而异。在本教程中,用户 admintomcat 用于测试安全设置。您需要确认在相应的服务器上存在这些用户,并为这些用户分配了相应的角色。

在 Sun Java System Application Server (GlassFish) 上定义角色

Sun Java System Application Server (GlassFish) 有一个名为 admin 的预定义用户,用于访问管理控制台。对于本方案,首先需要使用 Sun Java System Application Server 的管理控制台创建两个分别名为 useradmin 的新用户。名为 user 的用户对应用程序具有有限的访问权,名为 admin 的用户具有管理权限。然后需要通过修改 sun-web.xml 将这些用户映射到不同角色。sun-web.xml 位于项目的“配置文件”目录中。

  1. 通过在 IDE 的“服务”窗口中右键单击“服务器”> "GlassFish V2" 打开管理控制台。Sun Java System Application Server 的登录页面将在浏览器窗口中打开。您需要使用管理员用户名和口令进行登录才能访问管理控制台。

    注意:必须运行应用服务器才能访问管理控制台。要启动服务器,请右键单击 "GlassFish V2" 节点并选择“启动”。

  2. 在管理控制台中,导航至“配置”>“安全性”>“领域”。
  3. 选择 file 领域,并在“编辑领域”屏幕中单击“管理用户”。
  4. 单击“新建”添加新用户。键入 user 作为用户 ID,键入 user 作为口令。单击“确定”。
  5. 按照前面的步骤在 file 领域中创建名为 admin 的用户。

在 Tomcat Web 服务器上定义角色

与 IDE 捆绑在一起的 Tomcat 服务器已经有一些预定义的用户和角色。

Tomcat 服务器的基本用户和角色是在 tomcat-users.xml 中定义的。可以在 <USER_DIR>\apache-tomcat-5.5.17_base\conf 目录中找到 tomcat-users.xmltomcat-users.xml 文件应如下所示:

<tomcat-users>
<role
rolename="tomcat"/>
<role
rolename="role1"/>
<role
rolename="manager"/>
<role
rolename="admin"/>
<user
username="ide" password="(generated password)" roles="manager,admin"/>
<user
username="tomcat" password="tomcat" roles="tomcat"/>
<user
username="role1" password="tomcat" roles="role1"/>
<user
username="both" password="tomcat" roles="tomcat,role1"/>
</tomcat-users>

注意:用户 ide 的口令是在安装 Tomcat 时生成的。可以更改用户 ide 的口令,或者将该口令复制到 tomcat-users.xml 中。

配置登录方法

在为应用程序配置登录方法时,可以使用浏览器提供的登录窗口进行基本登录验证。另外,还可以创建具有登录表单的 Web 页。这两种登录配置都是基于用户/口令验证的。

通过配置 web.xml,可以为应用程序配置登录方法。可以在“项目”窗口的“配置文件”目录中找到 web.xml 文件。

基本登录

在使用基本登录配置时,登录窗口由浏览器提供。访问安全内容需要有效的用户名和口令。

以下步骤介绍了如何为 Sun Java System Application Server 配置基本登录。

  1. 在“项目”窗口中,双击位于“配置文件”目录中的 web.xml,该文件在可视编辑器中打开。
  2. 单击工具栏中的“安全”,在“安全”视图中打开该文件。
  3. 展开“登录配置”节点并将“登录配置”设置为“基本”。

    注意:如果希望使用表单,请选择“表单”而不是“基本”,并指定登录页和登录错误页。

  4. 输入 file 作为“域名称”。这与您在 Sun Java System Application Server 上创建用户的域名称相对应。

    登录配置
  5. 展开“安全角色”节点,并单击“添加”以添加角色名称。
  6. 添加以下安全角色:
    • Admin。添加到此角色的用户将有权访问服务器的 secureAdmin 目录。
    • User。添加到此角色的用户将有权访问服务器的 secureUser 目录。
  7. 通过执行以下操作,创建和配置名为 AdminConstraint 的安全约束:
    1. 单击“添加安全约束”,创建新的安全约束。
    2. 输入 AdminConstraint 作为新安全约束的“显示名称”。
    3. 单击“添加”,添加“Web 资源集合”。
    4. 在“增加 Web 资源”对话框中,将“资源名称”设置为 Admin,将“URL 模式”设置为 /secureAdmin/*,然后单击“确定”。

      注意:如果使用星号 (*),则会授予用户访问该文件夹中所有文件的权限。

      “增加 Web 资源”对话框
    5. 选中“启用验证约束”,然后单击“编辑”以编辑“角色名称”字段。
    6. 在“编辑角色名称”对话框的左窗格中选择 "Admin" 和 "User",单击“添加”,然后单击“确定”。

      在完成上述步骤之后,结果应如下图所示:

      管理员和用户约束
  8. 通过执行以下操作,创建和配置名为 UserConstraint 的安全约束:
    1. 单击“添加安全约束”,创建新的安全约束。
    2. 输入 UserConstraint 作为新安全约束的“显示名称”。
    3. 单击“添加”,添加“Web 资源集合”。
    4. 在“增加 Web 资源”对话框中,将“资源名称”设置为 User,将 URL 模式设置为 /secureUser/*,然后单击“确定”。
    5. 选中“启用验证约束”,然后单击“编辑”以编辑“角色名称”字段。
    注意:还可以在 web.xml 中设置会话的超时时间。要设置超时,请单击可视编辑器的“常规”标签,然后指定希望会话持续的时间。缺省值为 30 分钟。

    表单登录

    使用表单进行登录可以定制登录页和错误页的内容。使用表单配置验证的步骤与基本登录配置相同,但需要指定您创建的登录页和错误页

    以下步骤介绍了如何为 Sun Java System Application Server 配置登录表单。

    1. 在“项目”窗口中,双击位于 Web 页/WEB-INF 目录中的 web.xml,在可视编辑器中打开该文件。
    2. 单击工具栏中的“安全”,在“安全”视图中打开该文件,并展开“登录配置”节点。
    3. 将“登录配置”设置为“表单”。
    4. 通过单击“浏览”并找到 login.jsp 设置“表单登录页”。
    5. 通过单击“浏览”并找到 loginError.html 设置“表单错误页”。

      在 web.xml 中设置登录表单
    6. 单击“添加角色”并添加以下“安全角色”。
      • 对于管理员添加 Admin
      • 对于用户添加 User
    7. 单击“添加安全约束”,将其命名为 AdminConstraint,并执行以下操作:
      1. 添加“Web 资源集合”,并将名称设置为 Admin,将路径设置为 /secureAdmin/*
      2. 选中“启用验证约束”,然后单击“编辑”。
      3. 在“编辑角色名称”对话框的左窗格中选择 "Admin",然后单击“添加”。
    8. 单击“添加安全约束”,将其命名为 UserConstraint,并执行以下操作:
      1. 添加“Web 资源集合”,并将名称设置为 User,将路径设置为 /secureUser/*
      2. 选中“启用验证约束”,然后单击“编辑”。
      3. 在“编辑角色名称”对话框的左窗格中选择 "Admin" 和 "Tomcat",然后单击“添加”。

    注意:还可以在 web.xml 中设置会话的超时时间。要设置超时,请单击可视编辑器的“常规”标签,然后指定希望会话持续的时间。缺省值为 30 分钟。

配置安全部署描述符

如果将应用程序部署到 Sun Java System Application Server (GlassFish),您需要在 sun-web.xml 中配置安全部署描述符,以映射在 web.xml 中定义的安全角色。请注意,在 web.xml 中输入的值将显示在 sun-web.xml 中。sun-web.xml 会从 web.xml 中提取这些值。

  1. 双击位于“项目”窗口的“配置文件”目录中的 sun-web.xml
  2. 选择“安全”标签以显示安全角色。
  3. 选择 "Admin" 安全角色节点以打开“安全角色映射”窗格。
  4. 单击“添加主要用户”,并为主要用户名称输入 admin。单击“确定”。

    “添加主要用户”对话框
  5. 选择 "User" 安全角色节点,打开“安全角色映射”窗格。
  6. 单击“添加主要用户”,并为主要用户名称输入 user。单击“确定”。
  7. 将更改保存到 sun-web.xml

还可以通过单击位于“Sun Web 应用程序”可视编辑器右上角的“作为 XML 进行编辑”在 XML 编辑器中查看并编辑 sun-web.xml。如果在 XML 编辑器中打开 sun-web.xml,则可以看到 sun-web.xml 具有以下安全角色映射信息:

<security-role-mapping>
<role-name>
Admin</role-name>
<principal-name>
admin</principal-name>
</security-role-mapping>
<security-role-mapping>
<role-name>
User</role-name>
<principal-name>
user</principal-name>
</security-role-mapping>

部署并运行应用程序

在“项目”窗口中,右键单击该项目节点并选择“运行”。

注意:缺省情况下,将在启用“在保存时编译”功能的情况下创建项目,因此无需先编译代码即可在 IDE 中运行应用程序。有关“在保存时编译”功能的详细信息,请参见创建、导入和配置 Java 项目指南的“在保存时编译”部分。

在生成应用程序并将其部署到服务器之后,将在 Web 浏览器中打开起始页。通过单击 adminuser 选择您要访问的安全区域。

已部署的应用程序 1

在提供用户和口令之后,共有三个可能的结果:

  • 此用户的口令正确并且用户具有访问安全内容的权限 -> 显示安全内容页

    用户安全区域
  • 此用户的口令不正确 -> 显示错误页

    登录错误页
  • 此用户的口令正确,但用户没有访问安全内容的权限 -> 浏览器显示 "Error 403 Access to the requested resource has been denied"

    访问被拒绝

小结

在本教程中,您创建了一个安全 Web 应用程序。通过使用 web.xml 和 sun-web.xml 描述符编辑器,以及创建具有安全登录和多个身份标识的 Web 页,编辑了安全设置。

 

另请参见


 

本页的最新修改时间:2008 年 10 月 22 日

Companion
Projects:
                  Powered by: