java自定义注解开发_开发自定义Java模块

在你开始前

本教程描述了为TFIM 6.2开发自定义Java™插件的过程。 特别是,本教程将指导您完成自定义安全令牌服务(STS)模块的开发。 它是为具有强大Java开发技能的高级TFIM用户设计的,他们希望学习如何利用TFIM 6.2中引入的OSGi扩展点的功能。

关于本教程

TFIM 6.2引入了一种新方法,使客户可以扩展产品的功能。 TFIM使用与Eclipse平台相同的OSGi运行时模型,公开了几个“扩展点”,这些扩展点允许用户开发自己的自定义代码以在TFIM中运行。 这些扩展点之一(STSModule)允许开发用于信任服务(也称为安全令牌服务或STS)模块的自定义插件。 本教程将带您完成基本自定义信任服务映射模块的完整设计/开发/部署周期。 通过遵循本教程中的步骤,您将学习如何为Tivoli Federated Identity Manager(TFIM)6.2创建定制信任服务插件。 此处描述的示例模块也可通过本教程下载。

目标

在本教程中,您将学习如何为TFIM 6.2开发和部署自定义插件,该插件实现TFIM 6.2中提供的com.tivoli.am.fim.trustserver.sts.STSModule扩展点。 您将学习如何根据需要设计自定义插件,以及如何使用适当的开发环境来创建模块。 本教程中始终使用Rational Application Developer 7.0,但是Eclipse 3.2或更高版本也是创建这些基于OSGi的插件的可行开发平台。 本教程还说明了如何部署和测试已开发到TFIM 6.2运行时环境中的插件jar文件。

先决条件

本教程是为对身份管理概念有高级了解的人员而写的。 您应该具有Tivoli Federated Identity Manager的先前经验,并且对包括TFIM安全令牌服务(STS)和信任服务模块在内的相关概念有很好的理解。 还期望对Java编程语言有深入的了解。

系统要求

要遍历本教程中的示例,您将需要一个合适的开发环境来创建模块:Rational®Application Developer 7或Eclipse 3.2(或更高版本)。 您还将需要TFIM 6.2运行时环境来部署和测试模块(并收集jar来设置开发环境)。

开发,部署和测试自定义模块

本教程描述了为TFIM 6.2环境开发新的自定义Java™插件的分步过程。 它包括部署代码,创建新模块的实例以及通过TFIM控制台将其包含在信任链中的过程。 在本教程末尾还将详细介绍测试和调试过程。

介绍

TFIM 6.2运行时环境使用开放服务网关倡议(OSGi)和Eclipse扩展。 FIM插件现在打包为实现扩展的OSGi捆绑包(以jar文件的形式)。 这些插件可以安装,启动,停止或更新,而无需重新启动JVM。 在TFIM环境中,这些插件安装在<TFIM_Home> / plugins目录中,并使用TFIM控制台部署到<WebSphere_profile_config_root> / itfim / plugins目录。

com.tivoli.am.fim.trustserver.sts.STSModule是STS模块必须实现的扩展点接口类。 在TFIM中,术语“模块”和“插件”是同义词,在本教程中将互换使用。

本教程的主要目的是教您有关为TFIM 6.2开发插件的过程,并且以示例方式实现该过程-为TFIM 6.2开发基本的自定义映射模块。 我们创建的模块将允许对STSUniversalUser(STSUU)进行操作。 在“地图”模式下运行时,创建的插件将允许用户配置要包含在输出STSUU中的额外属性和值。 这样做的代码非常基础-重点是了解开发和部署模块所需的过程。

本教程提供了一个可下载的jar文件,作为预期输出的示例。 该jar文件可以作为Eclipse项目直接导入到开发环境中,并且可以用作开发自己的其他STSModule的起点。

本教程还说明了如何在TFIM 6.2环境中部署和测试自定义模块。 为简单起见,映射模块包含在基本信任链中,该链由默认STSUU实例以“验证” STSUU,然后是自定义映射模块以添加额外的属性,最后是另一个默认STSUU实例以“发出”令牌。 “部署”部分将更详细地描述此信任链的创建。 重要的是要注意,本教程中创建的自定义模块可以在任何链中使用。 选择本教程中描述的链是因为其简单性,以演示自定义模块的行为。 我们将使用一个简单的命令行实用工具来驱动自定义链的测试,以将请求发送到Trust Service的SOAP接口。

关键概念

TFIM安全令牌服务

TFIM实现了WS-Trust定义的安全令牌服务(STS)。 STS接收RequestSecurityToken(RST)消息,并返回RequestSecurityTokenResponse(RSTR)消息。 WS-Trust客户端可以访问此服务(通常通过SOAP),并提供了一种方法,通过该方法可以针对不同的令牌类型或值来验证和/或交换身份令牌。 STS执行的实际任务取决于对STS的请求中的参数(RequestSecurityToken或RST),以及TFIM STS中配置的信任链映射与该请求相匹配。 信任链映射将传入的请求映射到信任链。 信任链是执行特定任务的模块的配置列表。 这些任务包括:

  • 验证传入令牌
  • 将一个身份令牌映射到另一种令牌类型
  • 身份令牌中各种值的映射
  • 授权书
  • 稽核

STS任务的一个示例是获取传入的SAML 1.0令牌并将其交换为LTPA令牌。 为实现此目的而配置的信任链可能是3个模块:

  1. 验证传入的SAML 1.0令牌(在验证模式下与SAML 1.0令牌模块一起完成)
  2. 将参数从SAML 1.0令牌映射到可以作为LTPA令牌发布的格式(在映射模式下通过映射模块完成,例如XSLT映射模块)
  3. 发行新的LTPA令牌(在发行模式下与LTPA令牌模块一起完成)

TFIM STS的模块支持多种现成的令牌类型,但也可以扩展。 如果需要当前不可用的令牌类型,则可以编写模块以支持该令牌类型并将其添加到当前模块中。

如上所述,STS配置包含两个主要构建块:

  • 一组信任模块链。 链是信任模块实例的列表,它们构成了处理请求的工作流程。
  • 一组信任链映射。 每个映射都将一组链选择标准从传入请求映射到特定的信任模块链。 多个映射可能指向同一条链。 但是,每个映射可能具有链模块的唯一配置参数。




每个WS-Trust请求都包含一个或多个众所周知的参数值(即选择标准),这些参数值必须与TFIM STS中链映射之一的配置相匹配(否则无法处理该请求)。 这些参数的详细信息在表1中描述。

表1. WS-Trust服务请求参数
参数 描述
请求类型 使用几个规范定义的值之一描述一个请求系列的标识符,例如http://schemas.xmlsoap.org/ws/2005/02/trust/Validate
适用于 WS-Trust请求涉及的服务或所要求的安全令牌在什么范围内的表示。 通常为URL格式,可以指定为正则表达式。 例如http://finance.itso.ibm.com/CreditService
发行人 发出WS-Trust请求的服务组件的实体或类型。 通常为格式。 例如urn:itfim:wesb
令牌类型 可选URI,用于描述在对WS-Trust请求的响应中请求的令牌的类型。 例如http://docs.oasis-open.org/wss/oasis-wss-saml-token-profile-1.1#SAMLV2.0

信任模块链由一系列模块实例组成。 每个链中的第一个模块负责解析和验证其本机格式的令牌,并将其转换为链中所有其他模块共享的内部XML表示形式。 此XML表示形式称为STSUniversalUser(STSUU)。 来自WS-Trust请求的数据也存储在STS通用用户(STSUU)中。 然后,将STSUU文档在信任模块链中的模块之间传递。 中间模块转换数据,并且链中的最后一个模块负责将数据从STSUU转换为结果所需的令牌类型(必须为XML)。 该令牌作为WS-Trust响应的一部分返回。

图1. WS-Trust令牌请求
基本流程

可以以几种不同的模式配置模块实例以适合业务需求。 这些模式包括验证,映射,发布,验证,授权等。 验证模式下的模块负责验证身份令牌的真实性。 处于映射模式的人员(例如,使用XSL转换)对通过信任模块链的数据进行转换。 同时,处于发布模式的模块将根据通过信任模块链的数据生成身份令牌。 “其他”是一般的处理模式,例如执行授权。 最低配置的信任模块链可能会将模块配置为验证-映射-发行模式。 可以选择在地图模块之前或之后插入授权模块。 图1显示了具有验证-授权-映射-发行模块的信任模块链。 在需要从多个数据源检索用于标识映射过程的数据的情况下,可能还需要多个地图模块。

TFIM STS支持多种身份令牌类型,包括:

  • 用户名
  • SAML断言(版本1.0、1.1和2.0)
  • RACF门票
  • LTPA
  • 的Kerberos
  • X.509证书
  • STSUniversalUser

如果需要,可以使用Java对其他令牌模块进行编码。 代表身份令牌类型的模块通常在验证或发布模式下配置。

图形用户界面

GUIXML描述了STS模块的配置数据。 TFIM控制台使用GUIXML来显示配置面板,包括标签,文本输入字段,复选框,下拉列表等。这允许STSModule的开发人员自描述该模块所需的配置参数,并且TFIM控制台将当在信任链中使用模块时,提示您输入那些配置参数! TFIM不仅会提示您配置参数,还将它们存储在WebSphere配置存储库中,并自动将配置传播到集群环境中的所有节点,这样您的模块就不必担心任何标准配置参数的存储。

本教程末尾有一个参考部分,描述了一组可用的GUIXML小部件

在TFIM的早期版本中,GUIXML始终需要<PageTitle>字符串“ titleKey”和“ titleDescriptionKey”使用单独的java.util.ListResourceBundle 。 在TFIM 6.2,这仍然可以使用,但是,如果该模块是一种语言的标题和说明可以作为使用“titleText”和“titleDescription” <的PageTitle>字符串简单的文本串提供仅使用。

当无法检索ResourceBundle字符串时,将使用“ titleText”和“ titleDescription” 代替或将其作为默认值 。 清单1中显示了示例GUIXML结构。

如果需要国际化,则在TFIM 6.2中更容易包装。 TFIM 6.2不需要为java.util.ListResourceBundle类提供单独的 jar文件(以前的版本中必须将其复制到控制台的安装目录中),TFIM 6.2允许将资源包类与以下文件打包在同一jar文件中STS插件。

清单1. GUIXML示例
<PageInfo helpFile="com.tivoli.am....html">
<PageTitle
resourceBundleClass="...some Resource Bundle Class"
titleDescriptionKey="KEY to Resource Bundle Description String"
titleKey="Key to Resource Bundle Title String"
titleText="This is the text string for the title of this page"
titleDescription="This is the text string for the description of this page"/> </PageInfo>

使用OSGi插件框架,更为方便的是,不必手动编写GUIXML-Eclipse开发环境将允许您使用插件开发编辑器来构建GUIXML。

设计模块

定制模块设计

我们将在本教程中构建的自定义模块将被设计为处理STSUU对象。 该模块将具有自我描述的配置(使用GUIXML指定),以收集要添加到STSUU的新属性的名称和值。 如先前在GUIXML关键概念部分所述,GUIXML允许令牌模块描述其自己的配置窗口小部件和参数名称。 在TFIM信任链中使用此映射模块的实例时,将要求用户提供所需的属性名称和值对。

在信任链中使用此自定义模块的实例时,需要配置要添加到STSUU对象的属性的所需名称和值。 在创建链的过程中将提示您执行此配置(如下图2所示)。

图2.配置模块(由GUIXML指定)
user

与上面的示例配置一样,可以将已部署的信任链中模块的实例配置为向STSUU添加名称为“ testName”和值为“ testValue”的新属性。 注意:这仅是示例属性,每当在链中配置定制模块的实例时,可以将属性名称和值设置为任何值。

图3说明了应用映射模块(带有示例配置)时STSUU对象的操作。

图3.通过自定义模块的实例添加到STSUU的示例属性
user

开发模块

定制模块开发

本教程的这一部分描述了用于创建自定义模块的开发过程。 它包括准备开发环境,编写代码并将模块打包到一个jar文件中的步骤,这些文件准备好部署到TFIM中。

搭建开发环境

在开始开发定制模块之前,需要适当地配置开发环境。 如前所述,在为TFIM 6.2开发新的插件时,可以使用Eclipse 3.2(或更高版本)或Rational Application Developer 7(RAD 7)。 在本教程中,使用RAD 7环境。

首先,您需要将<TFIM_install_root> / plugins目录从TFIM运行时环境复制到开发环境中的本地目录。 也就是说,必须使jar文件在本地可用于IDE。 对于我们的示例,我们已将插件目录复制到c:\plugins

现在您可以启动RAD。 系统将提示您选择一个工作区, 如图4所示。 输入您选择的路径,然后选择确定。

图4.选择工作区
发射器

关闭出现的欢迎屏幕。 接下来,我们需要配置IDE目标平台(用于插件开发),以根据在上一步中在本地目录中可用的插件jar文件进行编译。 选择Windows->首选项。 将出现一个“首选项”窗口。 从左侧菜单中选择Plug-in Development-> Target Platform, 如图5所示 。 单击浏览... ,将位置值设置为包含插件的文件夹。 选择确定。

图5.设置目标平台
目标

现在,环境已准备就绪,可以开始开发自定义模块了。

开发定制模块

要创建扩展可用的STS模块扩展点的新插件项目,请选择文件->新建->项目。 “新建项目”向导将启动(请参见下面的图6 )。 选择“插件项目”,然后单击“下一步”继续完成向导。

图6.项目向导
pluginWiz1

输入com.tivoli.am.fim.demo.map的“项目名称”,并确保正确设置了“项目设置”和所选的“目标平台”, 如图7所示 。 然后,您可以单击下一步继续。

图7.为新的插件项目设置属性
pluginWiz2

将显示“插件内容”页面,其中包含已配置的“插件属性”, 如图8所示。 您应先取消选中两个“插件选项”,再单击“下一步”。

图8.插件内容向导
pluginWiz3

下一个屏幕提示您决定是否使用可用模板之一。 我们将在不使用模板的情况下开发自定义模块。 取消选中使用模板的选项, 如图9所示 ,然后单击Finish以完成向导。

图9.模板向导
pluginWiz4

RAD将提示您打开“插件开发”透视图( 如图10所示)。 点击“是”。

图10.切换透视图
pluginWiz5

在IDE中打开该项目的新程序包。 Overview选项卡将最初显示在中央面板中(请参阅图11

图11.插件清单编辑器
pluginWiz7

选择“ 依赖关系”选项卡,然后单击“添加”(必需的插件)。 将打开图12中显示的“插件选择”框,并允许您浏览可用的插件。 您需要指定新模块将依赖的软件包。 浏览找到并选择:com.tivoli.am.fim.common(6.2.0.0)和com.tivoli.am.fim.sts(6.2.0.0)。 单击确定。
注意:这两个插件包含在开发扩展STS模块扩展点的新插件时最少需要的密钥类。

图12.选择依赖项
pluginDepSelect8

图13显示了更新的Dependencies面板,该面板现在将在Required Plug-ins列表中显示两个选定的插件。

图13.插件清单编辑器
pluginDepReq9

切换到扩展选项卡,然后单击“添加”以创建新的扩展点。 出现New Extension窗口(请参阅图14 )。 选择com.tivoli.am.fim.sts.module (表明我们正在创建一个扩展程序,它将扩展STS模块扩展点,即实现STSModule接口。)单击“完成”。

图14.选择一个扩展点
extendSTSMod10

添加的扩展点显示在“扩展”面板中。 现在,您可以设置新扩展名的属性。 输入扩展名的ID和Name的值,如下图15所示。

图15.设置扩展细节
extDetails11

现在,我们可以使用插件编辑器的环境来指定我们的模块配置,包括GUIXML,它将自行描述模块的配置。 创建一个新模块, 如图16所示 。 也就是说,右键单击com.tivoli.am.fim.sts.module扩展,然后选择New-> Module。

图16.创建一个模块
newModule12

如图17所示,设置以下属性:

  • 将暴露类设置为com.tivoli.am.fim.demo.map.DemoMap
  • 将版本设置为1.0.0
  • 设置supportedModes以映射
  • 将legacyModule设置为false



com.tivoli.am.fim.demo.map.DemoMap类将是包含新插件功能的主类,因此将实现STSModule接口。 该类的代码在本教程后面的清单2中显示。

图17.设置模块属性
modProps13

在开始对定制模块的实现进行编码之前,我们需要为项目创建一个新的Java™包。 右键单击“插件透视图”左侧“程序包资源管理器”中显示的src文件夹。 选择New-> Package(请参阅图18 )。

图18.创建一个新的Java包
newPack14

New Java Package向导将启动。 输入软件包详细信息, 如图19所示,然后单击Finish。

图19.新的Java包属性
包15

在Package Explorer中右键单击新创建的Java软件包,然后选择New-> Class。 出现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值