目录
- 安装和配置工作环境
-
创建 Web 应用程序
- 创建安全目录
- 创建 JSP 索引页
- 创建“登录窗体”(对 Tomcat 为必选,对 GlassFish 或 WebLogic Server 为可选)
-
在目标服务器上创建用户和角色
- 在 GlassFish Server 上定义角色
- 在 Tomcat Web 服务器上定义角色
- 在 WebLogic Server 上定义角色和组
-
配置登录方法
- 基本登录
- 窗体登录
-
配置服务器部署描述符
- 配置 GlassFish Server 部署描述符
- 配置 WebLogic Server 部署描述符
- 部署并运行应用程序
要学习本教程,您需要具备以下软件和资源。
软件或资源 | 要求的版本 |
---|---|
NetBeans IDE | Java EE 版本 |
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"(GlassFish Server <版本号>)或 "Tomcat"(Tomcat <版本号>),然后单击 "Next"(下一步)。单击 "Browse"(浏览)并找到该应用服务器的安装目录。单击 "Finish"(完成)。
创建 Web 应用程序
在本练习中,您首先将创建 Web 应用程序项目和目录结构。然后在每个安全目录中创建一些简单的html文件。Web 应用程序使用基本登录验证来访问安全目录。如果希望使用登录窗体进行验证,则可以向窗体添加jsp页。
创建安全目录
- 选择 "File"(文件)> "New Project"(新建项目)(Ctrl-Shift-N 组合键),从 Java Web 类别中选择 "Web Application"(Web 应用程序),然后单击 "Next"(下一步)。
- 将项目命名为WebApplicationSecurity。接受默认设置。
- (可选)选中“使用专用文件夹存储库”复选框,并指定库文件夹的位置。有关此选项的详细信息,请参见使用 NetBeans IDE 开发应用程序中的与其他用户共享库。
- 单击 "Next"(下一步)。
- 选择要在其中部署应用程序的服务器。这里仅列出了已在 IDE 中注册的服务器。单击 "Next"(下一步)。
- 不需要添加框架,因此请单击 "Finish"(完成)。
-
如果创建了一个 EE 6 应用程序,请转到 IDE 的 "Projects"(项目)窗口,右键单击该项目的节点,然后选择 "New"(新建)>
"Other"(其他)> "Web" > "Standard Deployment Descriptor (web.xml)"(标准部署描述符
(web.xml))。接受所有默认值,然后单击相应的按钮以完成向导。
注:本教程介绍了如何在部署描述符中配置安全功能,但 EE 6 和 EE 7 应用程序默认使用标注,而不是部署描述符。
- 如果使用 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"(配置文件)文件夹中。
- 在 IDE 的 "Projects"(项目)窗口中,右键单击 "Web Pages"(Web 页),然后选择 "New"(新建)> "Other"(其他)。
- 在新建文件向导中,选择 "Other"(其他)作为类别,选择 "Folder"(文件夹)作为文件类型。单击 "Next"(下一步)。
-
在新建文件夹向导中,将文件夹命名为 "secureAdmin",然后单击 "Finish"(完成)。
secureAdmin 文件夹将显示在 "Projects"(项目)窗口的 "Web Pages"(Web 页)文件夹中。 - 重复前面的 3 个步骤,以创建另一个名为 secureUser 的文件夹。
- 在 secureUser 文件夹中创建一个新的html文件,方法是在 "Projects"(项目)窗口中右键单击 secureUser 文件夹,然后选择 "New"(新建)> "Other"(其他)。
- 在 "Other"(其他)类别中选择 "HTML" 文件类型。单击 "Next"(下一步)。
-
将新文件命名为 "pageU",然后单击 "Finish"(完成)。
单击 "Finish"(完成),此时将在源代码编辑器中打开pageU.html文件。
-
在源代码编辑器中,将pageU.html中的现有代码替换为以下代码。
User secure area
User Secure Area
- 右键单击 secureAdmin 文件夹并创建一个新的名为 pageA 的html文件。
-
在源代码编辑器中,将pageA.html中的现有代码替换为以下代码。
Admin secure area
Admin secure area
创建 JSP 索引页
现在可以创建包含指向安全区域的链接的 JSP 索引页。当用户单击链接时,系统将提示他们输入用户名和口令。如果使用的是基本登录,将使用默认浏览器登录窗口进行提示。如果使用的是登录窗体页,则用户将在一个窗体中输入用户名和口令。
-
在源代码编辑器中打开index.jsp,并将以下链接添加到pageA.html和pageU.html:
Request a secure Admin page href="secureAdmin/pageA.html">here!
Request a secure User page href="secureUser/pageU.html" >here!
- 保存所做的更改。
创建“登录窗体”(对 Tomcat 为必选,对 GlassFish 或 WebLogic Server 为可选)
如果希望使用登录窗体而不使用基本登录,则可以创建一个包含窗体的jsp页。然后在配置登录方法时指定登录页和错误页。
重要说明:Tomcat 用户必须创建一个登录窗体。
- 在 "Projects"(项目)窗口中,右键单击 "Web Pages"(Web 页)文件夹并选择 "New"(新建)> "JSP"。
- 将文件命名为login,保留其他字段的默认值,然后单击 "Finish"(完成)。
-
在源代码编辑器中,将以下代码插入到login.jsp的标记之间。
<form action="j_security_check" method="POST"> Username: type="text" name="j_username"> Password: type="password" name="j_password"> type="submit" value="Login">
- 在 "Web Pages"(Web 页)文件夹中创建一个新的名为loginError.html的html文件。这是一个简单的错误页。
-
在源代码编辑器中,将loginError.html中的现有代码替换为以下代码。
Login Test: Error logging in
Error Logging In
在目标服务器上创建用户
要能够在 Web 应用程序中使用用户/口令验证(基本登录或基于窗体的登录)安全功能,必须为目标服务器定义用户及其相应角色。要登录到服务器,该服务器上必须存在用户帐户。
定义用户和角色的方式因指定的目标服务器而异。在本教程中,用户admin和user用于测试安全设置。您需要确认在相应的服务器上存在这些用户,并为这些用户指定了相应的角色。
在 GlassFish Server 上定义用户
对于本方案,需要使用 GlassFish Server 的管理控制台创建两个分别名为user和admin的新用户。名为user的用户对应用程序具有有限的访问权限,名为admin的用户具有管理权限。
-
通过转至 IDE 的 "Services"(服务)窗口并右键单击 "Servers"(服务器)> "GlassFish Server" > "View Domain Admin Console"(查看域管理控制台)打开 "Admin Console"(管理控制台)。GlassFish Server 的登录页将在浏览器窗口中打开。您需要使用管理员用户名和口令进行登录才能访问管理控制台。
注:必须运行应用服务器才能访问管理控制台。要启动服务器,请右键单击 GlassFish Server 节点并选择 "Start"(启动)。
-
在 "Admin Console"(管理控制台)中,导航至 "Configurations"(配置)> "server-config" >
"Security"(安全性)> "Realms"(领域)> "File"(文件)。"Edit
Realm"(编辑领域)面板将会打开。
-
单击 "Edit Realm"(编辑领域)面板顶部的 "Manage Users"(管理用户)按钮。将打开 "File
Users"(文件用户)面板。
- 单击 "New"(新建)。将打开 "New File Realm User"(新建文件领域用户)面板。键入user作为用户 ID,键入userpw01作为口令。单击 "OK"(确定)。
- 按照前面的步骤在file领域中创建名为admin、口令为adminpw1的用户。
在 Tomcat Web 服务器上定义角色和用户
对于 Tomcat 7,在 NetBeans IDE 中注册服务器时,将创建一个角色为 manager-script 的用户,并为该用户创建一个口令。
Tomcat 服务器的基本用户和角色在tomcat-users.xml中。可以在\conf目录中找到tomcat-users.xml。
注:通过在 "Services"(服务)窗口中右键单击 Tomcat 服务器节点并选择 "Properties"(属性)可以查找 CATALINA_BASE 位置。"Server Properties"(服务器属性)将打开。CATALINA_BASE 的位置在 "Connection"(连接)标签中。
注:如果使用早期版本的 IDE 捆绑的 Tomcat 6,该服务器将定义具有口令以及 administrator 和 manager 角色的ide用户。用户ide的口令是在安装 Tomcat 6 时生成的。可以更改用户ide的口令,或者将该口令复制到tomcat-users.xml中。
将用户添加到 Tomcat 中:
- 在编辑器中打开/conf/tomcat-users.xml。
- 添加一个名为AdminRole的角色。
- 添加一个名为UserRole的角色。
- 添加一个名为admin并具有adminpw1口令和AdminRole角色的用户。
- 添加一个名为user并具有userpw01口令和UserRole角色的用户。
现在,tomcat-users.xml文件显示如下:
...[User with manager-script role, defined when Tomcat 7 was registered with the IDE] ...
在 WebLogic Server 上定义用户和组
对于本方案,首先需要使用 WebLogic Server 的管理控制台创建两个分别名为user和admin的新用户。将这些用户分别添加到userGroup和adminGroup组中。稍后,将要为这些组指定安全角色。userGroup将对应用程序具有有限的访问权限,而adminGroup将具有管理权限。
WebLogic 管理控制台联机帮助中提供了有关向 Web Logic 服务器添加用户和组的一般说明。
将 "user" 和 "admin" 用户和组添加到 WebLogic 中:
-
通过转至 IDE 的 "Services"(服务)窗口并右键单击 "Servers"(服务器)> "WebLogic Server" > "View Admin Console"(查看管理控制台)打开 "Admin Console"(管理控制台)。GlassFish Server 的登录页将在浏览器窗口中打开。您需要使用管理员用户名和口令进行登录才能访问管理控制台。
注:必须运行应用服务器才能访问管理控制台。要启动服务器,请右键单击 WebLogic Server 节点并选择 "Start"(启动)。
- 在左面板中,选择 "Security Realms"(安全领域)。"Summary of Security Realms"(安全领域概要)页将会打开。
- 在 "Summary of Security Realms"(安全领域概要)页中,选择领域的名称(默认领域为 "myrealm")。"Settings for Realm Name"(领域名称设置)页将会打开。
- 在 "Settings for Realm Name"(领域名称设置)页中,选择 "Users and Groups"(用户和组)> "Users"(用户)。将显示 "Users"(用户)表。
- 在 "Users"(用户)表中,单击 "New"(新建)。"Create New User"(创建新用户)页将会打开。
-
键入名称 "user" 和口令 "userpw01"。还可以键入说明。接受默认的 "Authentication Provider"(验证提供器)。
- 单击 "OK"(确定)。您将返回到 "Users"(用户)表。
- 单击 "New"(新建)并添加一个具有名称 "admin" 和口令 "admin1" 的用户。
- 打开 "Groups"(组)标签。将显示 "Groups"(组)表。
- 单击 "New"(新建)。"Create a New Group"(创建新组)窗口将会打开。
- 将组命名为 userGroup。接受默认提供器并单击 "OK"(确定)。您将返回到 "Groups"(组)表。
- 单击 "New"(新建)并创建组 adminGroup。
- 为下一过程打开 "Users"(用户)标签。
现在,将admin用户添加至adminGroup,并将user用户添加至userGroup。
将用户添加到组中:
- 在 "Users"(用户)标签中,单击admin用户。用户的 "Settings"(设置)页将会打开。
- 在 "Settings"(设置)页中,打开 "Groups"(组)标签。
- 在 "Parent Groups: Available:"(父组:可用:)表中,选择adminGroup。
-
单击向右箭头 >。adminGroup将出现在 "Parent Groups: Chosen:"(父组: 选定:)表中。
- 单击 "Save"(保存)。
- 返回到 "Users"(用户)标签。
- 单击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 用户需要使用窗体登录。
配置基本登录:
- 在 "Projects"(项目)窗口中,展开项目的 "Configuration Files"(配置文件)节点,然后双击web.xml。将在可视编辑器中打开web.xml文件。
- 单击工具栏中的 "Security"(安全),在 "Security"(安全)视图中打开该文件。
-
展开 "Login Configuration"(登录配置)节点,然后将 "Login Configuration"(登录配置)设置为
"Basic"(基本)。
注:如果希望使用窗体,请选择 "Form"(窗体)而不是 "basic"(基本),并指定登录页和登录错误页。
-
根据服务器输入领域名称。
- GlassFish:输入file作为领域名称。这是在 GlassFish Server 上创建用户所在的默认领域名称。
- Tomcat:请勿输入领域名称。
- WebLogic:输入您的领域名称。默认领域是myrealm。
- 展开 "Security Roles "(安全角色)节点,然后单击 "Add"(添加)可添加角色名称。
-
添加以下安全角色:
- AdminRole。添加到此角色的用户将有权访问服务器的secureAdmin目录。
- UserRole。添加到此角色的用户将有权访问服务器的secureUser目录。
注:GlassFish 角色名称必须以大写字母开头。
-
通过执行以下操作,创建和配置名为AdminConstraint的安全约束:
- 单击 "Add Security Constraint"(添加安全约束)。将显示新安全约束部分。
-
输入AdminConstraint作为新安全约束的显示名称。
- 单击 "ADD"(添加)。将打开 "Add Web Resource"(增加 Web 资源)对话框。
-
在 "Add Web Resource"(增加 Web 资源)对话框中,将 "Resource Name"(资源名称)设置为Admin,将 "URL Pattern"(URL 模式)设置为/secureAdmin/*,然后单击 "OK"(确定)。对话框将关闭。
注:如果使用星号 (*),则会授予用户访问该文件夹中所有文件的权限。
- 选中 "Enable Authentication Constraint"(启用验证约束),然后单击 "Edit"(编辑)。"Edit Role Names"(编辑角色名称)对话框将会打开。
-
在 "Edit Role Names"(编辑角色名称)对话框中,在左窗格中选择 AdminRole,单击 "Add"(添加),然后单击
"OK"(确定)。
在完成上述步骤之后,结果应如下图所示:
-
通过执行以下操作,创建和配置名为UserConstraint的安全约束:
- 单击 "Add Security Constraint"(添加安全约束),创建新的安全约束。
- 输入UserConstraint作为新安全约束的显示名称。
- 单击 "Add"(添加),添加 "Web Resource Collection"(Web 资源集合)。
- 在 "Add Web Resource"(增加 Web 资源)对话框中,将 "Resource Name"(资源名称)设置为User,将 URL 模式设置为/secureUser/*,然后单击 "OK"(确定)。
- 选中 "Enable Authentication Constraint"(启用验证约束),然后单击 "Edit"(编辑)以编辑 "Role Name"(角色名称)字段。
- 在 "Edit Role Names"(编辑角色名称)对话框中,在左窗格中选择 AdminRole 和 UserRole,单击 "Add"(添加),然后单击 "OK"(确定)。
窗体登录
使用窗体进行登录可以定制登录页和错误页的内容。使用窗体配置验证的步骤与基本登录配置相同,但需要指定您创建的登录页和错误页。
以下步骤演示如何配置登录窗体
- 在 "Projects"(项目)窗口中,双击位于Web 页/WEB-INF目录中的web.xml,在可视编辑器中打开该文件。
- 单击工具栏中的 "Security"(安全),在 "Security"(安全)视图中打开该文件,并展开 "Login Configuration"(登录配置)节点。
- 将 "Login Configuration"(登录配置)设置为 "Form"(窗体)。
- 通过单击 "Browse"(浏览)并找到login.jsp设置“窗体登录页”。
-
通过单击 "Browse"(浏览)并找到loginError.html设置“窗体错误页”。
-
根据服务器输入领域名称。
- GlassFish:输入file作为领域名称。这是在 GlassFish Server 上创建用户所在的默认领域名称。
- Tomcat:请勿输入领域名称。
- WebLogic:输入您的领域名称。默认领域是myrealm。
- 展开 "Security Roles "(安全角色)节点,然后单击 "Add"(添加)可添加角色名称。
-
添加以下安全角色:
服务器角色 描述 AdminRole 添加到此角色的用户将有权访问服务器的secureAdmin目录。 UserRole 添加到此角色的用户将有权访问服务器的secureUser目录。 -
通过执行以下操作,创建和配置名为AdminConstraint的安全约束:
- 单击 "Add Security Constraint"(添加安全约束),创建新的安全约束。
- 输入AdminConstraint作为新安全约束的显示名称。
- 单击 "Add"(添加),添加 "Web Resource Collection"(Web 资源集合)。
-
在 "Add Web Resource"(增加 Web 资源)对话框中,将 "Resource Name"(资源名称)设置为Admin,将“URL 模式”设置为/secureAdmin/*,然后单击 "OK"(确定)。
注:如果使用星号 (*),则会授予用户访问该文件夹中所有文件的权限。
- 选中 "Enable Authentication Constraint"(启用验证约束),然后单击 "Edit"(编辑)。"Edit Role Names"(编辑角色名称)对话框将会打开。
-
在 "Edit Role Names"(编辑角色名称)对话框中,在左窗格中选择 AdminRole,单击 "Add"(添加),然后单击
"OK"(确定)。
在完成上述步骤之后,结果应如下图所示:
-
通过执行以下操作,创建和配置名为UserConstraint的安全约束:
- 单击 "Add Security Constraint"(添加安全约束),创建新的安全约束。
- 输入UserConstraint作为新安全约束的显示名称。
- 单击 "Add"(添加),添加 "Web Resource Collection"(Web 资源集合)。
- 在 "Add Web Resource"(增加 Web 资源)对话框中,将 "Resource Name"(资源名称)设置为User,将 URL 模式设置为/secureUser/*,然后单击 "OK"(确定)。
- 选中 "Enable Authentication Constraint"(启用验证约束),然后单击 "Edit"(编辑)以编辑 "Role Name"(角色名称)字段。
- 在 "Edit Role Names"(编辑角色名称)对话框中,在左窗格中选择 AdminRole 和 UserRole,单击 "Add"(添加),然后单击 "OK"(确定)。
配置服务器部署描述符
如果要将应用程序部署到 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 部署描述符:
-
在 "Projects"(项目)窗口中,展开项目的 "Configuration Files"(配置文件)节点,然后双击glassfish-web.xml。glassfish-web.xml部署描述符将在 GlassFish
部署描述符的特殊标签化编辑器中打开。
注:对于早于 3.1 的 GlassFish Server 版本,此文件名为sun-web.xml。
- 选择 "Security"(安全)标签以显示安全角色。
- 选择 AdminRole 安全角色节点以打开 "Security Role Mapping"(安全角色映射)窗格。
-
单击 "Add Principal"(添加主用户),并为主用户名称输入admin。单击 "OK"(确定)。
- 选择 UserRole 安全角色节点以打开 "Security Role Mapping"(安全角色映射)窗格。
- 单击 "Add Principal"(添加主用户),并为主用户名称输入user。单击 "OK"(确定)。
- 将更改保存到glassfish-web.xml。
此外,也可以通过单击 "XML" 标签,在 XML 编辑器中查看和编辑glassfish-web.xml。如果在 XML 编辑器中打开glassfish-web.xml,则可以看到glassfish-web.xml具有以下安全角色映射信息:
AdminRoleadminUserRoleuser
配置 WebLogic Server 部署描述符
WebLogic 部署描述符名为weblogic.xml。目前,IDE 对 GlassFish 部署描述符的支持未扩展至 WebLogic 部署描述符。因此,您需要手动对weblogic.xml进行所有更改。
WebLogic Server 部署描述符在 "Configuration Files"(配置文件)文件夹中。如果它不在此处,可通过右键单击项目的节点并转至 "New"(新建)> "Other"(其他)> "WebLogic" > "WebLogic Deployment Descriptor"(WebLogic 部署描述符)来创建。接受所有默认设置。
注:有关确保 WebLogic 中 web 应用程序安全(包括声明和编程安全)的详细信息,请参见针对 Oracle WebLogic Server 的 Oracle Fusion Middleware 编程安全。
配置 WebLogic 部署描述符:
- 在 "Projects"(项目)窗口中,展开项目的 "Configuration Files"(配置文件)节点,然后双击weblogic.xml。weblogic.xml部署描述符在编辑器中打开。
-
在元素内,键入或粘贴以下安全角色指定元素:
AdminRoleadminGroupUserRoleuserGroup
- 将更改保存到weblogic.xml。
部署并运行应用程序
在 "Projects"(项目)窗口中,右键单击该项目节点并选择 "Run"(运行)。
注:默认情况下,将在启用“在保存时编译”功能的情况下创建项目,因此无需先编译代码即可在 IDE 中运行应用程序。有关“在保存时编译”功能的详细信息,请参见 Developing Applications with NetBeans IDE User's Guide 中的 Building Java Projects。
在构建应用程序并将其部署到服务器之后,将在 Web 浏览器中打开起始页。通过单击 admin 或 user 选择您要访问的安全区域。
在提供用户和口令之后,共有三个可能的结果:
-
此用户的口令正确并且用户具有访问安全内容的权限 -> 显示安全内容页
-
此用户的口令不正确 -> 显示错误页
-
此用户的口令正确,但用户没有访问安全内容的权限 -> 浏览器显示 "Error 403 Access to the requested resource has been denied"
小结
在本教程中,您创建了一个安全 Web 应用程序。您已经通过使用 web.xml 和 glassfish-web.xml 描述符编辑器,以及创建具有安全登录和多个身份标识的 Web 页,编辑了安全设置。