corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

在 Java EE 5 中构建安全 Enterprise Bean

通过 NetBeans IDE 中的 Java EE 5 规范支持,您可以充分利用许多 Java EE 5 功能来简化应用程序开发。Java EE 5 规范的一个重大改进是采用了标注。使用标注,您可以消除在对应用程序进行编码时所使用的许多模板代码,并最大限度地减少部署应用程序时所需的配置量。

通过使用标注而得到极大简化的一个领域是 Enterprise Bean 的开发和配置。使用标注,您可以指定以前在部署描述符文件中所指定的许多配置属性,从而使很多部署描述符文件变得不再必需。尽管应用程序可能仍然需要一些部署描述符文件(如 web.xml),但 IDE 的多视图部署描述符编辑器大大简化了对这些文件的编辑。

通过使用标注,现在构建安全的 Enterprise Bean 要简单得多。您可以使用安全标注直接在源代码中配置授权,而无需在 ejb-jar.xml 部署描述符中配置 Enterprise Bean 安全性。Java EE 5 企业应用程序不需要 ejb-jar.xmlapplication.xml

有关 Java EE 5 规范的一些特性的概述,请参见 Introduction to Java EE 5 Technology(Java EE 5 技术简介)。有关标注规范的详细信息,请参见 JSR 250: Common Annotations for the Java Platform(JSR 250:Java 平台的常用标注)。

本文档针对的是 NetBeans IDE 6.1 发行版。如果您使用的是 6.0 版本的 IDE,则本文档中所述的步骤同样也适用,只是 NetBeans IDE 6.1 中的某些选项在早期发行版中不可用。

预计时间:30 分钟

教程练习

本页上的内容适用于 NetBeans IDE 6.0 和 6.1

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

软件或资源 要求的版本
NetBeans IDE Web & Java EE 版本 6.1
版本 6.0
Java Development Kit (JDK) 版本 6
版本 5
GlassFish Application Server V2

要学习本教程,您需要在 IDE 中注册 GlassFish/Sun Java System Application Server 的本地实例。如果您安装了“完整”版本或 "Web & Java EE" 版本的 IDE,则应该已安装并注册该应用服务器。如果在 IDE 中未注册该应用服务器,请选择“工具”>“服务器”,以在服务器管理器中注册它。您不能将企业应用程序部署到 Tomcat Web 服务器。

先决条件

本文档假定您具备以下技术的一些基本知识或编程经验:

  • Java 编程
  • NetBeans IDE

在应用服务器上创建安全组

在本例中,我们仅希望 bank_users 组的用户访问我们的 Enterprise Bean。我们将在应用服务器 file 安全领域的 bank_users 组中创建 manager 用户。

  1. 启动应用服务器,方法是:在“服务”窗口中右键单击应用服务器的节点,然后选择“启动”。
  2. 右键单击应用服务器节点,然后选择“查看管理控制台”。登录到管理控制台,在左侧导航栏中选择“配置”>“安全性”>“领域”> "file"。
  3. 单击管理控制台中心框架中的“管理用户”按钮。在“当前用户”下,单击“新建”按钮。
  4. 在“用户 ID”中键入 manager,在“密码”中键入 password,在“组列表”中键入 bank_users。然后单击“确定”。
管理控制台中的“文件用户”面板

创建企业应用程序

我们的企业应用程序将包含一个简单的会话 Bean 和一个尝试访问该会话 Bean 的应用程序客户端。

创建企业应用程序项目

  1. 选择“文件”>“新建项目”(Ctrl-Shift-N),然后从“企业”类别中选择“企业应用程序”模板。单击“下一步”。
  2. 将应用程序命名为 Secure,然后设置项目位置。
  3. 取消选中“使用专用的文件夹来存储库”选项(如果该选项处于选中状态)。
    (如果您使用的是 NetBeans IDE 6.1,则此选项可用。对于本教程,不必将项目库复制到专用文件夹中,因为您无需与其他用户或项目共享库。)
    单击“下一步”。
  4. 将“服务器”设置为 GlassFish,并将“Java EE 版本”设置为 "Java EE 5"。
  5. 选中“创建 EJB 模块”和“创建应用程序客户端模块”,并取消选中“创建 Web 应用程序模块”。单击“完成”。

确保会话 Bean 中的方法安全

我们的会话 Bean 没有任何特殊的功能。它仅仅返回一个余额样例。我们将创建一个 getStatus 方法,通过使用 @RolesAllowed 对其进行标注来确保该方法 Bean 安全,然后指定允许访问该方法的安全角色。此安全角色由应用程序使用,它与服务器上的用户和组不同。之后,我们将在配置部署描述符时将此安全角色映射到用户和组。

安全标注可以分别应用于类中的每个方法,也可以应用于整个类。在此简单练习中,我们将使用 @RolesAllowed 来标注方法,但 Java EE 5 规范还定义了其他可用在 Enterprise Bean 中的安全标注。

  1. 在“项目”窗口中,右键单击 EJB 模块的节点 ("Secure-ejb"),然后选择“新建”>“会话 Bean”。
  2. 将 Bean 命名为 AccountStatus,将包命名为 bean,然后将该 Bean 设置为具有一个远程接口。单击“完成”。

    单击“完成”后,IDE 将创建 AccountStatusBean 并在源代码编辑器中打开该文件。此外,IDE 还会为该 Bean 创建 AccountStatusRemote 远程接口。

  3. 在源代码编辑器中,将下面以粗体显示的字段声明添加到 AccountStatusBean 中:
    public class AccountStatusBean implements AccountStatusRemote {
        private String amount = "250";
  4. 在源代码编辑器中,在 AccountStatusBean 内的任意位置单击鼠标右键,然后选择“EJB 方法”>“添加 Business 方法”。将此方法命名为 getStatus,并将返回类型设置为 String。IDE 将自动在远程接口中公开此业务方法。
  5. 在源代码编辑器中,将下面以粗体显示的代码行添加到 getStatus 方法中:
    public String getStatus() {
        return "The account contains $" + amount;
    }
  6. 键入下面以粗体显示的代码来标注 getStatus 方法:
    @RolesAllowed({"USERS"})
    public String getStatus() {

    此标注表示只有安全角色为 USERS 的用户才能访问 getStatus 方法。

  7. 修复 import 语句并保存所做的更改。确保 javax.annotation.security.RolesAllowed 已添加到该文件中。

使用应用程序客户端访问会话 Bean

应用程序只需具有一个访问会话 Bean 的简单方法。我们将通过使用 @EJB 标注来调用 Enterprise Bean。

  1. 在“项目”窗口中,展开 "Secure-app-client" >“源包”> "secure",然后双击 "Main.java" 以在源代码编辑器中打开该文件。
  2. 在源代码编辑器中单击鼠标右键,然后选择“企业资源”>“调用 Enterprise Bean”。
  3. 在“调用 Enterprise Bean”对话框中,展开 "Secure-ejb" 节点,然后选择 "AccountStatusBean"。单击“确定”。

    IDE 将在应用程序客户端中添加以下代码,用于查找会话 Bean:

    @EJB
    
    
    private static AccountStatusRemote accountStatusBean;
  4. 通过添加以下代码来修改 main 方法,然后保存所做的更改:
    public static void main(String[] args) {
        System.out.println(accountStatusBean.getStatus());

配置部署描述符

在 Java EE 5 中,企业应用程序通常不需要诸如 ejb-jar.xml 之类的部署描述符文件。如果展开 Secure-ejb 或 Secure 企业应用程序下面的“配置文件”节点,则会看到没有部署描述符。我们可以使用标注来指定在 ejb-jar.xml 中配置的许多属性。在本例中,我们将通过在会话 Bean 中使用 @RolesAllowed 标注来为 EJB 方法指定安全角色。

但是,在为应用程序配置安全性时,仍然需要在部署描述符中指定一些属性。在本例中,我们需要将企业应用程序中使用的安全角色 (USERS) 映射到在应用服务器上配置的用户和组。我们已在应用服务器上创建了 bank_users 组,现在需要将该组映射到企业应用程序中的安全角色 USERS。为此,我们将编辑企业应用程序的 sun-application.xml 部署描述符。

因为企业应用程序不需要部署描述符便可运行,所以 IDE 缺省情况下不创建部署描述符。因此,我们首先需要创建部署描述符,然后再对其进行配置。

  1. 从主菜单中选择“文件”>“新建文件”以打开“新建文件”向导。或者,也可以通过在“项目”窗口中右键单击 "Secure" 企业应用程序项目,然后从弹出式菜单中选择“新建”>“其他”来打开“新建文件”向导。
  2. 在“新建文件”向导的“类别”窗格中,选择 "GlassFish",然后选择“GlassFish 部署描述符”文件类型。单击“下一步”,然后在下一个面板中单击“完成”。
    单击“完成”后,IDE 将创建 sun-application.xml,并在多视图部署描述符编辑器中打开该文件。您将使用多视图编辑器的“安全”标签来配置安全角色映射。
  3. 在“安全”标签中,单击“添加安全角色映射”,然后在“安全角色名称”中键入 USERS
  4. 单击“添加组”,在“组名称”中键入 bank_users,然后单击“确定”。
  5. 保存所做的更改。
提示输入用户名和口令的对话框

通过单击多视图编辑器中的 "XML" 标签,可以在 XML 视图中查看部署描述符文件。您可以看到该部署描述符文件现在包含以下代码:

<sun-application>


  <security-role-mapping>


    <role-name>USERS</role-name>


    <group-name>bank_users</group-name>


  </security-role-mapping>


</sun-application>

运行应用程序

现在,可以运行应用程序了。运行项目时,系统将提示输入 bank_users 组中用户的用户名和口令。

  1. 右键单击 "Secure" 项目节点,然后选择“运行项目”。IDE 将生成 EAR 文件,启动应用服务器(如果未在运行),并将该 EAR 文件部署到应用服务器。将出现提示输入用户名和口令的对话框。
    提示输入用户名和口令的对话框
  2. 在对话框中输入用户名 (manager) 和口令 (password),然后单击“确定”。“输出”窗口中将显示以下内容:
    The account contains 250$

这是一个非常基本的示例,用于演示如何使用 Java 标注来确保 Enterprise Bean 中的方法安全。



另请参见

有关使用标注来确保 Enterprise Bean 安全的详细信息,请参见以下资源:

有关使用 NetBeans IDE 开发 Java EE 应用程序的详细信息,请参见以下资源:

要发送意见和建议、获得支持以及随时了解 NetBeans IDE Java EE 开发功能的最新开发情况,请加入 nbj2ee 邮件列表

Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems