| // |
| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| // |
| |
| = 在 NetBeans IDE 中保护 Web 应用程序的安全 |
| :jbake-type: tutorial |
| :jbake-tags: tutorials |
| :jbake-status: published |
| :icons: font |
| :syntax: true |
| :source-highlighter: pygments |
| :toc: left |
| :toc-title: |
| :description: 在 NetBeans IDE 中保护 Web 应用程序的安全 - Apache NetBeans |
| :keywords: Apache NetBeans, Tutorials, 在 NetBeans IDE 中保护 Web 应用程序的安全 |
| |
| 由 Dan Kolar 撰稿,James Branam 和 Jeff Rubinoff 维护 |
| |
| 本文档介绍在部署到 Oracle GlassFish Open Source Edition、Oracle WebLogic 或 Apache Tomcat 服务器的 Web 应用程序中添加安全功能的基础知识。 |
| |
| 本文档介绍了如何使用基本登录窗口以及 Web 页中的登录窗体配置安全验证。本文档还将指导您完成在 Tomcat 和 GlassFish Server 上创建用户的步骤。创建用户之后,然后可以通过在部署描述符中设置安全属性创建安全角色。本文档还介绍了在将应用程序部署到 GlassFish Server 时,如何使用 JDBC 验证来保护应用程序的安全。 |
| |
| *预计时间:_40_ 分钟* |
| |
| |
| image::images/netbeans-stamp-80-74-73.png[title="此页上的内容适用于 NetBeans IDE 7.2、7.3、7.4 和 8.0"] |
| |
| |
| *要学习本教程,您需要具备以下软件和资源。* |
| |
| |=== |
| |软件或资源 |要求的版本 |
| |
| |link:https://netbeans.org/downloads/index.html[+NetBeans IDE+] |Java EE 版本 |
| |
| |link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Java 开发者工具包 (JDK)+] |版本 7 或 8 |
| |
| |Java EE 平台 |Java EE 6 或 7 |
| |
| |Travel 数据库 |无版本要求 |
| |
| |符合 Java EE 规范的 Web 服务器或应用服务器 |Tomcat Web 服务器 7.x 或 8.x、Oracle WebLogic 11g 或 |
| GlassFish Server Open Source Edition 4.x |
| |=== |
| |
| |
| == 安装和配置工作环境 |
| |
| 安装并启动 NetBeans IDE。可以使用捆绑的 Tomcat 服务器或 GlassFish Server 完成本教程。 |
| |
| 确保已安装服务器,并已在 IDE 中注册服务器实例。可以使用服务器管理器来注册已安装的服务器实例。(选择 "Tools"(工具)> "Servers"(服务器)> "Add Server"(添加服务器)。选择 "GlassFish Server <version number>"(GlassFish Server <版本号>)或 "Tomcat <version number>"(Tomcat <版本号>),然后单击 "Next"(下一步)。单击 "Browse"(浏览)并找到该应用服务器的安装目录。单击 "Finish"(完成)。 |
| |
| |
| == 创建 Web 应用程序 |
| |
| 在本练习中,您首先将创建 Web 应用程序项目和目录结构。然后在每个安全目录中创建一些简单的 ``html`` 文件。Web 应用程序使用基本登录验证来访问安全目录。如果希望使用登录窗体进行验证,则可以向窗体添加 ``jsp`` 页。 |
| |
| |
| === 创建安全目录 |
| |
| 1. 选择 "File"(文件)> "New Project"(新建项目)(Ctrl-Shift-N 组合键),从 Java Web 类别中选择 "Web Application"(Web 应用程序),然后单击 "Next"(下一步)。 |
| 2. 将项目命名为 ``WebApplicationSecurity`` 。接受默认设置。 |
| 3. (可选)选中“使用专用文件夹存储库”复选框,并指定库文件夹的位置。有关此选项的详细信息,请参见_使用 NetBeans IDE 开发应用程序_中的link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG455[+与其他用户共享库+]。 |
| 4. 单击 "Next"(下一步)。 |
| 5. 选择要在其中部署应用程序的服务器。这里仅列出了已在 IDE 中注册的服务器。单击 "Next"(下一步)。 |
| 6. 不需要添加框架,因此请单击 "Finish"(完成)。 |
| 7. 如果创建了一个 EE 6 应用程序,请转到 IDE 的 "Projects"(项目)窗口,右键单击该项目的节点,然后选择 "New"(新建)> "Other"(其他)> "Web" > "Standard Deployment Descriptor (web.xml)"(标准部署描述符 (web.xml))。接受所有默认值,然后单击相应的按钮以完成向导。 |
| |
| *注:*本教程介绍了如何在部署描述符中配置安全功能,但 EE 6 和 EE 7 应用程序默认使用标注,而不是部署描述符。 |
| |
| 8. 如果使用 GlassFish 或 WebLogic Server 以及 NetBeans IDE 7.0.1 或更高版本,则需生成特定于服务器的描述符。右键单击项目的节点并选择 "New"(新建)> "Other"(其他)> "GlassFish" > "GlassFish Descriptor"(GlassFish 描述符),或选择 "New"(新建)> "Other"(其他)> "WebLogic" > "WebLogic Descriptor"(WebLogic 描述符)。"Create Server-Specific Descriptor"(创建特定于服务器的描述符)对话框将会打开。接受所有默认值,然后单击 "Finish"(完成)。特定于服务器的描述符(名为 ``glassfish-web.xml`` 或 ``weblogic.xml`` )将出现在项目中的 "Configuration Files"(配置文件)文件夹中。 |
| 9. 在 IDE 的 "Projects"(项目)窗口中,右键单击 "Web Pages"(Web 页),然后选择 "New"(新建)> "Other"(其他)。 |
| 10. 在新建文件向导中,选择 "Other"(其他)作为类别,选择 "Folder"(文件夹)作为文件类型。单击 "Next"(下一步)。 |
| 11. |
| 在新建文件夹向导中,将文件夹命名为 "secureAdmin",然后单击 "Finish"(完成)。 |
| |
| secureAdmin 文件夹将显示在 "Projects"(项目)窗口的 "Web Pages"(Web 页)文件夹中。 |
| 12. 重复前面的 3 个步骤,以创建另一个名为 secureUser 的文件夹。 |
| 13. 在 secureUser 文件夹中创建一个新的 ``html`` 文件,方法是在 "Projects"(项目)窗口中右键单击 secureUser 文件夹,然后选择 "New"(新建)> "Other"(其他)。 |
| 14. 在 "Other"(其他)类别中选择 "HTML" 文件类型。单击 "Next"(下一步)。 |
| 15. 将新文件命名为 "pageU",然后单击 "Finish"(完成)。 |
| |
| 单击 "Finish"(完成),此时将在源代码编辑器中打开 ``pageU.html`` 文件。 |
| |
| 16. 在源代码编辑器中,将 ``pageU.html`` 中的现有代码替换为以下代码。[html-tag]#<html> |
| <head> |
| <title># |
| |
| [source,xml] |
| ---- |
| |
| User secure area[html-tag]#</title> |
| </head> |
| <body> |
| <h1>#User Secure Area[html-tag]#</h1> |
| </body> |
| </html># |
| ---- |
| 17. 右键单击 secureAdmin 文件夹并创建一个新的名为 pageA 的 ``html`` 文件。 |
| 18. 在源代码编辑器中,将 ``pageA.html`` 中的现有代码替换为以下代码。[html-tag]#<html> |
| <head> |
| <title># |
| |
| [source,xml] |
| ---- |
| |
| Admin secure area[html-tag]#</title> |
| </head> |
| <body> |
| <h1>#Admin secure area[html-tag]#</h1> |
| </body> |
| </html># |
| ---- |
| |
| |
| === 创建 JSP 索引页 |
| |
| 现在可以创建包含指向安全区域的链接的 JSP 索引页。当用户单击链接时,系统将提示他们输入用户名和口令。如果使用的是基本登录,将使用默认浏览器登录窗口进行提示。如果使用的是登录窗体页,则用户将在一个窗体中输入用户名和口令。 |
| |
| 1. 在源代码编辑器中打开 ``index.jsp`` ,并将以下链接添加到 ``pageA.html`` 和 ``pageU.html`` :[jsp-html-tag]#<p># |
| |
| [source,html] |
| ---- |
| |
| Request a secure Admin page [jsp-html-tag]#<a# [jsp-html-argument]#href=#[jsp-xml-value]#"secureAdmin/pageA.html"#[jsp-html-tag]#>#here![jsp-html-tag]#</a></p> |
| <p>#Request a secure User page [jsp-html-tag]#<a# [jsp-html-argument]#href=#[jsp-xml-value]#"secureUser/pageU.html"# [jsp-html-tag]#>#here![jsp-html-tag]#</a></p># |
| ---- |
| 2. 保存所做的更改。 |
| |
| |
| === 创建“登录窗体”(对 Tomcat 为必选,对 GlassFish 或 WebLogic Server 为可选) |
| |
| 如果希望使用登录窗体而不使用基本登录,则可以创建一个包含窗体的 ``jsp`` 页。然后在<<Basic_login_config,配置登录方法>>时指定登录页和错误页。 |
| |
| *重要说明:*Tomcat 用户必须创建一个登录窗体。 |
| |
| 1. 在 "Projects"(项目)窗口中,右键单击 "Web Pages"(Web 页)文件夹并选择 "New"(新建)> "JSP"。 |
| 2. 将文件命名为 ``login`` ,保留其他字段的默认值,然后单击 "Finish"(完成)。 |
| 3. 在源代码编辑器中,将以下代码插入到 ``login.jsp`` 的 ``<body>`` 标记之间。 |
| |
| [source,xml] |
| ---- |
| |
| <[jsp-html-tag]#form# [jsp-html-argument]#action=#[jsp-xml-value]#"j_security_check"# [jsp-html-argument]#method=#[jsp-xml-value]#"POST"#[jsp-html-tag]#># |
| Username:[jsp-html-tag]#<input# [jsp-html-argument]#type=#[jsp-xml-value]#"text"# [jsp-html-argument]#name=#[jsp-xml-value]#"j_username"#[jsp-html-tag]#><br># |
| Password:[jsp-html-tag]#<input# [jsp-html-argument]#type=#[jsp-xml-value]#"password"# [jsp-html-argument]#name=#[jsp-xml-value]#"j_password"#[jsp-html-tag]#> |
| <input# [jsp-html-argument]#type=#[jsp-xml-value]#"submit"# [jsp-html-argument]#value=#[jsp-xml-value]#"Login"#[jsp-html-tag]#> |
| </form># |
| ---- |
| 4. 在 "Web Pages"(Web 页)文件夹中创建一个新的名为 ``loginError.html`` 的 ``html`` 文件。这是一个简单的错误页。 |
| 5. 在源代码编辑器中,将 ``loginError.html`` 中的现有代码替换为以下代码。[html-tag]#<html> |
| <head> |
| <title># |
| |
| [source,xml] |
| ---- |
| |
| Login Test: Error logging in[html-tag]#</title> |
| </head> |
| <body> |
| <h1>#Error Logging In[html-tag]#</h1> |
| <br/> |
| </body> |
| </html># |
| ---- |
| |
| |
| == 在目标服务器上创建用户 |
| |
| 要能够在 Web 应用程序中使用用户/口令验证(基本登录或基于窗体的登录)安全功能,必须为目标服务器定义用户及其相应角色。要登录到服务器,该服务器上必须存在用户帐户。 |
| |
| 定义用户和角色的方式因指定的目标服务器而异。在本教程中,用户 ``admin`` 和 ``user`` 用于测试安全设置。您需要确认在相应的服务器上存在这些用户,并为这些用户指定了相应的角色。 |
| |
| |
| === 在 GlassFish Server 上定义用户 |
| |
| 对于本方案,需要使用 GlassFish Server 的管理控制台创建两个分别名为 ``user`` 和 ``admin`` 的新用户。名为 ``user`` 的用户对应用程序具有有限的访问权限,名为 ``admin`` 的用户具有管理权限。 |
| |
| 1. 通过转至 IDE 的 "Services"(服务)窗口并右键单击 "Servers"(服务器)> "GlassFish Server" > "View Domain Admin Console"(查看域管理控制台)打开 "Admin Console"(管理控制台)。GlassFish Server 的登录页将在浏览器窗口中打开。您需要使用管理员用户名和口令进行登录才能访问管理控制台。 |
| |
| *注:*必须运行应用服务器才能访问管理控制台。要启动服务器,请右键单击 GlassFish Server 节点并选择 "Start"(启动)。 |
| |
| 2. 在 "Admin Console"(管理控制台)中,导航至 "Configurations"(配置)> "server-config" > "Security"(安全性)> "Realms"(领域)> "File"(文件)。"Edit Realm"(编辑领域)面板将会打开。 |
| image::images/edit-realm.png[] |
| 3. 单击 "Edit Realm"(编辑领域)面板顶部的 "Manage Users"(管理用户)按钮。将打开 "File Users"(文件用户)面板。 |
| image::images/file-users.png[] |
| 4. 单击 "New"(新建)。将打开 "New File Realm User"(新建文件领域用户)面板。键入 ``user`` 作为用户 ID,键入 ``userpw01`` 作为口令。单击 "OK"(确定)。 |
| 5. 按照前面的步骤在 ``file`` 领域中创建名为 ``admin`` 、口令为 ``adminpw1`` 的用户。 |
| |
| |
| === 在 Tomcat Web 服务器上定义角色和用户 |
| |
| 对于 Tomcat 7,在 NetBeans IDE 中注册服务器时,将创建一个角色为 manager-script 的用户,并为该用户创建一个口令。 |
| |
| Tomcat 服务器的基本用户和角色在 ``tomcat-users.xml`` 中。可以在 ``_<CATALINA_BASE>_\conf`` 目录中找到 ``tomcat-users.xml`` 。 |
| |
| *注:*通过在 "Services"(服务)窗口中右键单击 Tomcat 服务器节点并选择 "Properties"(属性)可以查找 CATALINA_BASE 位置。"Server Properties"(服务器属性)将打开。CATALINA_BASE 的位置在 "Connection"(连接)标签中。 |
| |
| image::images/tomcat-properties.png[] image::images/catalina-base.png[] |
| |
| *注:*如果使用早期版本的 IDE 捆绑的 Tomcat 6,该服务器将定义具有口令以及 administrator 和 manager 角色的 ``ide`` 用户。用户 ``ide`` 的口令是在安装 Tomcat 6 时生成的。可以更改用户 ``ide`` 的口令,或者将该口令复制到 ``tomcat-users.xml`` 中。 |
| |
| *将用户添加到 Tomcat 中:* |
| |
| 1. 在编辑器中打开 ``_<CATALINA_BASE>_/conf/tomcat-users.xml`` 。 |
| 2. 添加一个名为 ``AdminRole`` 的角色。 |
| |
| [source,java] |
| ---- |
| |
| <role rolename="AdminRole"/> |
| ---- |
| 3. 添加一个名为 ``UserRole`` 的角色。 |
| |
| [source,java] |
| ---- |
| |
| <role rolename="UserRole"/> |
| ---- |
| 4. 添加一个名为 ``admin`` 并具有 ``adminpw1`` 口令和 ``AdminRole`` 角色的用户。 |
| |
| [source,java] |
| ---- |
| |
| <user username="admin" password="adminpw1" roles="AdminRole"/> |
| ---- |
| 5. 添加一个名为 ``user`` 并具有 ``userpw01`` 口令和 ``UserRole`` 角色的用户。 |
| |
| [source,java] |
| ---- |
| |
| <user username="user" password="userpw01" roles="UserRole"/> |
| ---- |
| |
| 现在, ``tomcat-users.xml`` 文件显示如下: |
| |
| |
| [source,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="userpw01" roles="UserRole"/> |
| <user username="admin" password="adminpw1" roles="AdminRole"/> |
| [User with manager-script role, defined when Tomcat 7 was registered with the IDE] |
| ... |
| </tomcat-users> |
| ---- |
| |
| |
| === 在 WebLogic Server 上定义用户和组 |
| |
| 对于本方案,首先需要使用 WebLogic Server 的管理控制台创建两个分别名为 ``user`` 和 ``admin`` 的新用户。将这些用户分别添加到 ``userGroup`` 和 ``adminGroup`` 组中。稍后,将要为这些组指定安全角色。 ``userGroup`` 将对应用程序具有有限的访问权限,而 ``adminGroup`` 将具有管理权限。 |
| |
| WebLogic link:http://download.oracle.com/docs/cd/E21764_01/apirefs.1111/e13952/taskhelp/security/ManageUsersAndGroups.html[+管理控制台联机帮助+]中提供了有关向 Web Logic 服务器添加用户和组的一般说明。 |
| |
| *将 "user" 和 "admin" 用户和组添加到 WebLogic 中:* |
| |
| 1. 通过转至 IDE 的 "Services"(服务)窗口并右键单击 "Servers"(服务器)> "WebLogic Server" > "View Admin Console"(查看管理控制台)打开 "Admin Console"(管理控制台)。GlassFish Server 的登录页将在浏览器窗口中打开。您需要使用管理员用户名和口令进行登录才能访问管理控制台。 |
| |
| *注:*必须运行应用服务器才能访问管理控制台。要启动服务器,请右键单击 WebLogic Server 节点并选择 "Start"(启动)。 |
| |
| 2. 在左面板中,选择 "Security Realms"(安全领域)。"Summary of Security Realms"(安全领域概要)页将会打开。 |
| 3. 在 "Summary of Security Realms"(安全领域概要)页中,选择领域的名称(默认领域为 "myrealm")。"Settings for Realm Name"(领域名称设置)页将会打开。 |
| 4. 在 "Settings for Realm Name"(领域名称设置)页中,选择 "Users and Groups"(用户和组)> "Users"(用户)。将显示 "Users"(用户)表。 |
| 5. 在 "Users"(用户)表中,单击 "New"(新建)。"Create New User"(创建新用户)页将会打开。 |
| 6. 键入名称 "user" 和口令 "userpw01"。还可以键入说明。接受默认的 "Authentication Provider"(验证提供器)。 |
| image::images/wl-admin-newuser.png[] |
| 7. 单击 "OK"(确定)。您将返回到 "Users"(用户)表。 |
| 8. 单击 "New"(新建)并添加一个具有名称 "admin" 和口令 "admin1" 的用户。 |
| 9. 打开 "Groups"(组)标签。将显示 "Groups"(组)表。 |
| 10. 单击 "New"(新建)。"Create a New Group"(创建新组)窗口将会打开。 |
| 11. 将组命名为 userGroup。接受默认提供器并单击 "OK"(确定)。您将返回到 "Groups"(组)表。 |
| 12. 单击 "New"(新建)并创建组 adminGroup。 |
| 13. 为下一过程打开 "Users"(用户)标签。 |
| |
| 现在,将 ``admin`` 用户添加至 ``adminGroup`` ,并将 ``user`` 用户添加至 ``userGroup`` 。 |
| |
| *将用户添加到组中:* |
| |
| 1. 在 "Users"(用户)标签中,单击 ``admin`` 用户。用户的 "Settings"(设置)页将会打开。 |
| 2. 在 "Settings"(设置)页中,打开 "Groups"(组)标签。 |
| 3. 在 "Parent Groups: Available:"(父组:可用:)表中,选择 ``adminGroup`` 。 |
| 4. 单击向右箭头 >。 ``adminGroup`` 将出现在 "Parent Groups: Chosen:"(父组: 选定:)表中。 |
| image::images/wl-admin-usersettings.png[] |
| 5. 单击 "Save"(保存)。 |
| 6. 返回到 "Users"(用户)标签。 |
| 7. 单击 ``user`` 用户并将其添加至 ``userGroup`` 。 |
| |
| |
| == 配置登录方法 |
| |
| 在为应用程序配置登录方法时,可以使用浏览器提供的登录窗口进行基本登录验证。另外,还可以创建具有登录窗体的 Web 页。这两种登录配置都是基于用户/口令验证的。 |
| |
| 要配置登录,需创建_安全约束_并为这些安全约束指定角色。安全约束定义一组文件。将角色指定给约束时,拥有该角色的用户可以访问约束定义的文件集。例如,在本教程中,您将 AdminRole 指定给 AdminConstraint,将 UserRole 和 AdminRole 指定给 UserConstraint。这意味着,具有 AdminRole 角色的用户有权访问 Admin 文件和 User 文件,但具有 UserRole 角色的用户只有权访问 User 文件。 |
| |
| *注:*向单独的管理员角色提供对用户文件的访问权限不是常规用例。替代方法是只将 UserRole 指定给 UserConstraint,并且在服务器端将 AdminRole 赋予也是管理员的特定 *用户*。您应决定如何按用例授予访问权限。 |
| |
| 通过配置 ``web.xml`` ,可以为应用程序配置登录方法。可以在 "Projects"(项目)窗口的 "Configuration Files"(配置文件)目录中找到 ``web.xml`` 文件。 |
| |
| |
| === 基本登录 |
| |
| 在使用基本登录配置时,登录窗口由浏览器提供。访问安全内容需要有效的用户名和口令。 |
| |
| 以下步骤介绍了如何为 GlassFish 和 WebLogic Server 配置基本登录。Tomcat 用户需要使用<<form-login,窗体登录>>。 |
| |
| *配置基本登录:* |
| |
| 1. 在 "Projects"(项目)窗口中,展开项目的 "Configuration Files"(配置文件)节点,然后双击 ``web.xml`` 。将在可视编辑器中打开 ``web.xml`` 文件。 |
| 2. 单击工具栏中的 "Security"(安全),在 "Security"(安全)视图中打开该文件。 |
| 3. 展开 "Login Configuration"(登录配置)节点,然后将 "Login Configuration"(登录配置)设置为 "Basic"(基本)。 |
| |
| *注:*如果希望使用窗体,请选择 "Form"(窗体)而不是 "basic"(基本),并指定登录页和登录错误页。 |
| |
| 4. 根据服务器输入领域名称。 |
| * *GlassFish:*输入 ``file`` 作为领域名称。这是在 GlassFish Server 上创建用户所在的默认领域名称。 |
| * *Tomcat:*请勿输入领域名称。 |
| * *WebLogic:*输入您的领域名称。默认领域是 ``myrealm`` 。 |
| image::images/security-roles.png[] |
| 5. 展开 "Security Roles "(安全角色)节点,然后单击 "Add"(添加)可添加角色名称。 |
| 6. 添加以下安全角色: |
| * ``AdminRole`` 。添加到此角色的用户将有权访问服务器的 ``secureAdmin`` 目录。 |
| * ``UserRole`` 。添加到此角色的用户将有权访问服务器的 ``secureUser`` 目录。 |
| |
| *注:*GlassFish 角色名称必须以大写字母开头。 |
| |
| 7. 通过执行以下操作,创建和配置名为 ``AdminConstraint`` 的安全约束: |
| 1. 单击 "Add Security Constraint"(添加安全约束)。将显示新安全约束部分。 |
| 2. 输入 ``AdminConstraint`` 作为新安全约束的显示名称。 |
| image::images/admin-constraint.png[] |
| 3. 单击 "ADD"(添加)。将打开 "Add Web Resource"(增加 Web 资源)对话框。 |
| 4. |
| 在 "Add Web Resource"(增加 Web 资源)对话框中,将 "Resource Name"(资源名称)设置为 ``Admin`` ,将 "URL Pattern"(URL 模式)设置为 ``/secureAdmin/*`` ,然后单击 "OK"(确定)。对话框将关闭。 |
| |
| *注:*如果使用星号 (*),则会授予用户访问该文件夹中所有文件的权限。 |
| |
| image::images/addwebresource.png[] |
| 5. 选中 "Enable Authentication Constraint"(启用验证约束),然后单击 "Edit"(编辑)。"Edit Role Names"(编辑角色名称)对话框将会打开。 |
| 6. 在 "Edit Role Names"(编辑角色名称)对话框中,在左窗格中选择 AdminRole,单击 "Add"(添加),然后单击 "OK"(确定)。 |
| |
| 在完成上述步骤之后,结果应如下图所示: |
| |
| image::images/constraints.png[] |
| 8. 通过执行以下操作,创建和配置名为 ``UserConstraint`` 的安全约束: |
| 1. 单击 "Add Security Constraint"(添加安全约束),创建新的安全约束。 |
| 2. 输入 ``UserConstraint`` 作为新安全约束的显示名称。 |
| 3. 单击 "Add"(添加),添加 "Web Resource Collection"(Web 资源集合)。 |
| 4. 在 "Add Web Resource"(增加 Web 资源)对话框中,将 "Resource Name"(资源名称)设置为 ``User`` ,将 URL 模式设置为 ``/secureUser/*`` ,然后单击 "OK"(确定)。 |
| 5. 选中 "Enable Authentication Constraint"(启用验证约束),然后单击 "Edit"(编辑)以编辑 "Role Name"(角色名称)字段。 |
| 6. 在 "Edit Role Names"(编辑角色名称)对话框中,在左窗格中选择 AdminRole 和 UserRole,单击 "Add"(添加),然后单击 "OK"(确定)。 |
| 注:还可以在 web.xml 中设置会话的超时时间。要设置超时,请单击可视编辑器的 "General"(常规)标签,然后指定希望会话持续的时间。默认值为 30 分钟。 |
| |
| |
| |
| === 窗体登录 |
| |
| 使用窗体进行登录可以定制登录页和错误页的内容。使用窗体配置验证的步骤与基本登录配置相同,但需要指定您创建的<<loginform,登录页和错误页>>。 |
| |
| 以下步骤演示如何配置登录窗体 |
| |
| 1. 在 "Projects"(项目)窗口中,双击位于 ``Web 页/WEB-INF`` 目录中的 ``web.xml`` ,在可视编辑器中打开该文件。 |
| 2. 单击工具栏中的 "Security"(安全),在 "Security"(安全)视图中打开该文件,并展开 "Login Configuration"(登录配置)节点。 |
| 3. 将 "Login Configuration"(登录配置)设置为 "Form"(窗体)。 |
| 4. 通过单击 "Browse"(浏览)并找到 ``login.jsp`` 设置“窗体登录页”。 |
| 5. |
| 通过单击 "Browse"(浏览)并找到 ``loginError.html`` 设置“窗体错误页”。 |
| |
| image::images/login-forms.png[] |
| 6. 根据服务器输入领域名称。 |
| * *GlassFish:*输入 ``file`` 作为领域名称。这是在 GlassFish Server 上创建用户所在的默认领域名称。 |
| * *Tomcat:*请勿输入领域名称。 |
| * *WebLogic:*输入您的领域名称。默认领域是 ``myrealm`` 。 |
| 7. 展开 "Security Roles "(安全角色)节点,然后单击 "Add"(添加)可添加角色名称。 |
| 8. 添加以下安全角色: |
| |=== |
| |
| |服务器角色 |描述 |
| |
| |AdminRole |添加到此角色的用户将有权访问服务器的 ``secureAdmin`` 目录。 |
| |
| |UserRole |添加到此角色的用户将有权访问服务器的 ``secureUser`` 目录。 |
| |=== |
| 9. 通过执行以下操作,创建和配置名为 ``AdminConstraint`` 的安全约束: |
| 1. 单击 "Add Security Constraint"(添加安全约束),创建新的安全约束。 |
| 2. 输入 ``AdminConstraint`` 作为新安全约束的显示名称。 |
| 3. 单击 "Add"(添加),添加 "Web Resource Collection"(Web 资源集合)。 |
| 4. |
| 在 "Add Web Resource"(增加 Web 资源)对话框中,将 "Resource Name"(资源名称)设置为 ``Admin`` ,将“URL 模式”设置为 ``/secureAdmin/*`` ,然后单击 "OK"(确定)。 |
| |
| *注:*如果使用星号 (*),则会授予用户访问该文件夹中所有文件的权限。 |
| |
| image::images/addwebresource.png[] |
| 5. 选中 "Enable Authentication Constraint"(启用验证约束),然后单击 "Edit"(编辑)。"Edit Role Names"(编辑角色名称)对话框将会打开。 |
| 6. 在 "Edit Role Names"(编辑角色名称)对话框中,在左窗格中选择 AdminRole,单击 "Add"(添加),然后单击 "OK"(确定)。 |
| |
| 在完成上述步骤之后,结果应如下图所示: |
| |
| image::images/constraints.png[] |
| 10. 通过执行以下操作,创建和配置名为 ``UserConstraint`` 的安全约束: |
| 1. 单击 "Add Security Constraint"(添加安全约束),创建新的安全约束。 |
| 2. 输入 ``UserConstraint`` 作为新安全约束的显示名称。 |
| 3. 单击 "Add"(添加),添加 "Web Resource Collection"(Web 资源集合)。 |
| 4. 在 "Add Web Resource"(增加 Web 资源)对话框中,将 "Resource Name"(资源名称)设置为 ``User`` ,将 URL 模式设置为 ``/secureUser/*`` ,然后单击 "OK"(确定)。 |
| 5. 选中 "Enable Authentication Constraint"(启用验证约束),然后单击 "Edit"(编辑)以编辑 "Role Name"(角色名称)字段。 |
| 6. 在 "Edit Role Names"(编辑角色名称)对话框中,在左窗格中选择 AdminRole 和 UserRole,单击 "Add"(添加),然后单击 "OK"(确定)。 |
| 注:还可以在 web.xml 中设置会话的超时时间。要设置超时,请单击可视编辑器的 "General"(常规)标签,然后指定希望会话持续的时间。默认值为 30 分钟。 |
| |
| |
| == 配置服务器部署描述符 |
| |
| 如果要将应用程序部署到 GlassFish 或 WebLogic Server,则需配置服务器部署描述符,以映射在 ``web.xml`` 中定义的安全角色。服务器部署描述符列在 "Projects"(项目)窗口中项目的 "Configuration Files"(配置文件)节点下。 |
| |
| |
| === 配置 GlassFish Server 部署描述符 |
| |
| GlassFish Server 部署描述符名为 ``glassfish-web.xml`` 。服务器部署描述符在 "Configuration Files"(配置文件)文件夹中。如果它不在此处,可通过右键单击项目的节点并转至 "New"(新建)> "Other"(其他)> "GlassFish" > "GlassFish Deployment Descriptor"(GlassFish 部署描述符)来创建。接受所有默认设置。 |
| |
| 请注意,在 ``web.xml`` 中输入的值将显示在 ``glassfish-web.xml`` 中。IDE 会从 ``web.xml`` 中提取这些值。 |
| |
| *配置 GlassFish 部署描述符:* |
| |
| 1. 在 "Projects"(项目)窗口中,展开项目的 "Configuration Files"(配置文件)节点,然后双击 ``glassfish-web.xml`` 。 ``glassfish-web.xml`` 部署描述符将在 GlassFish 部署描述符的特殊标签化编辑器中打开。 |
| |
| *注:*对于早于 3.1 的 GlassFish Server 版本,此文件名为 ``sun-web.xml`` 。 |
| |
| 2. 选择 "Security"(安全)标签以显示安全角色。 |
| 3. 选择 AdminRole 安全角色节点以打开 "Security Role Mapping"(安全角色映射)窗格。 |
| 4. |
| 单击 "Add Principal"(添加主用户),并为主用户名称输入 ``admin`` 。单击 "OK"(确定)。 |
| |
| image::images/add-principal.png[] |
| 5. 选择 UserRole 安全角色节点以打开 "Security Role Mapping"(安全角色映射)窗格。 |
| 6. 单击 "Add Principal"(添加主用户),并为主用户名称输入 ``user`` 。单击 "OK"(确定)。 |
| 7. 将更改保存到 ``glassfish-web.xml`` 。 |
| |
| 此外,也可以通过单击 "XML" 标签,在 XML 编辑器中查看和编辑 ``glassfish-web.xml`` 。如果在 XML 编辑器中打开 ``glassfish-web.xml`` ,则可以看到 ``glassfish-web.xml`` 具有以下安全角色映射信息: |
| |
| [xml-tag]#<security-role-mapping> |
| <role-name># |
| |
| [source,xml] |
| ---- |
| |
| AdminRole[xml-tag]#</role-name> |
| <principal-name>#admin[xml-tag]#</principal-name> |
| </security-role-mapping> |
| <security-role-mapping> |
| <role-name>#UserRole[xml-tag]#</role-name> |
| <principal-name>#user[xml-tag]#</principal-name> |
| </security-role-mapping># |
| ---- |
| |
| |
| === 配置 WebLogic Server 部署描述符 |
| |
| WebLogic 部署描述符名为 ``weblogic.xml`` 。目前,IDE <<gf-dd,对 GlassFish 部署描述符的支持>>未扩展至 WebLogic 部署描述符。因此,您需要手动对 ``weblogic.xml`` 进行所有更改。 |
| |
| WebLogic Server 部署描述符在 "Configuration Files"(配置文件)文件夹中。如果它不在此处,可通过右键单击项目的节点并转至 "New"(新建)> "Other"(其他)> "WebLogic" > "WebLogic Deployment Descriptor"(WebLogic 部署描述符)来创建。接受所有默认设置。 |
| |
| *注:*有关确保 WebLogic 中 web 应用程序安全(包括声明和编程安全)的详细信息,请参见link:http://download.oracle.com/docs/cd/E21764_01/web.1111/e13711/thin_client.htm[+针对 Oracle WebLogic Server 的 Oracle Fusion Middleware 编程安全+]。 |
| |
| *配置 WebLogic 部署描述符:* |
| |
| 1. 在 "Projects"(项目)窗口中,展开项目的 "Configuration Files"(配置文件)节点,然后双击 ``weblogic.xml`` 。 ``weblogic.xml`` 部署描述符在编辑器中打开。 |
| 2. 在 ``<weblogic-web-app>`` 元素内,键入或粘贴以下安全角色指定元素:[xml-tag]#<security-role-assignment> |
| <role-name># |
| |
| [source,xml] |
| ---- |
| |
| AdminRole[xml-tag]#</role-name> |
| <principal-name>#adminGroup[xml-tag]#</principal-name> |
| </security-role-assignment> |
| <security-role-assignment> |
| <role-name>#UserRole[xml-tag]#</role-name> |
| <principal-name>#userGroup[xml-tag]#</principal-name> |
| </security-role-assignment># |
| ---- |
| 3. 将更改保存到 ``weblogic.xml`` 。 |
| |
| |
| == 部署并运行应用程序 |
| |
| 在 "Projects"(项目)窗口中,右键单击该项目节点并选择 "Run"(运行)。 |
| |
| *注:*默认情况下,将在启用“在保存时编译”功能的情况下创建项目,因此无需先编译代码即可在 IDE 中运行应用程序。有关“在保存时编译”功能的详细信息,请参见 _Developing Applications with NetBeans IDE User's Guide_ 中的 link:http://www.oracle.com/pls/topic/lookup?ctx=nb8000&id=NBDAG510[+Building Java Projects+]。 |
| |
| 在构建应用程序并将其部署到服务器之后,将在 Web 浏览器中打开起始页。通过单击 *admin* 或 *user* 选择您要访问的安全区域。 |
| |
| image::images/deploy1.png[] |
| |
| 在提供用户和口令之后,共有三个可能的结果: |
| |
| * 此用户的口令正确并且用户具有访问安全内容的权限 -> 显示安全内容页 |
| |
| image::images/deploy2.png[] |
| * |
| 此用户的口令不正确 -> 显示错误页 |
| |
| image::images/deploy3.png[] |
| * |
| 此用户的口令正确,但用户没有访问安全内容的权限 -> 浏览器显示 "Error 403 Access to the requested resource has been denied" |
| |
| image::images/deploy4.png[] |
| |
| |
| == 小结 |
| |
| 在本教程中,您创建了一个安全 Web 应用程序。您已经通过使用 web.xml 和 glassfish-web.xml 描述符编辑器,以及创建具有安全登录和多个身份标识的 Web 页,编辑了安全设置。 |
| |
| |
| |
| == 另请参见 |
| |
| * link:quickstart-webapps.html[+Web 应用程序开发简介+] |
| * link:../../trails/java-ee.html[+Java EE 和 Java Web 学习资源+] |
| |
| |
| |=== |
| | |
| link:/about/contact_form.html?to=3&subject=Feedback: Securing a Web Application[+发送有关此教程的反馈意见+] |
| |
| |
| |=== |