科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道在 WebSphere Adapter for SAP 中配置动态身份验证

在 WebSphere Adapter for SAP 中配置动态身份验证

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文介绍如何在 WebSphere Process Server 里的 WebSphere Adapter 中配置动态身份验证。 动态身份验证配置允许您配置适配器,这样可以动态设置适配器用来与 Enterprise Information System 系统通信的用户名和密码。

作者:ibm 来源:ibm 2007年10月9日

关键字: WEBSPHERE SAP 技术 中间件

  • 评论
  • 分享微博
  • 分享邮件

引言

IBM® WebSphere® Adapter 运行在 WebSphere Process Server 的 JCA 容器中,并通过 Java™ 2 Enterprise Edition (J2EE) Connector Architecture (JCA) 1.5 规范实现。本文介绍如何使用 WebSphere Adapter 的功能,通过动态更改 JCA ConnectionSpec 属性将不同的身份验证应用到 Enterprise Information System (EIS)。

WebSphere JCA 适配器通过 Managed Connection Factory 属性可以使用基本用户名和密码身份验证,也可以使用 WebSphere Application Server 中的 Java 身份验证和授权服务(Java Authentication and Authorization Services,JAAS)对象或身份验证别名 (Authentication Aliases)。如果您希望使用这些身份验证方法中的任意一种来更改用于身份验证的用户名和密码,则可以通过 WebSphere Application Server 域控制台和 JAAS 安全设置来重新部署适配器或更改用户名或密码。

通过将用户名和密码传递到代表相应 EIS 对象的 BusinessGraph,可以使用不同的(动态)身份验证调用适配器。

我们将构建一个基于 IBM WebSphere Adapter for SAP 的示例来演示此功能。





回页首


JCA 动态 Connection Specification Properties

WebSphere Process Server Version 6.0.1 BusinessGraph 实现拥有一个称为“properties”的子业务对象,可以按以下方式将其定义为 BusinessGraph 模式定义中的一个元素:

<element name="properties" type="anyType" minOccurs="0"/><!--DataObject-->

此业务对象可以拥有在 JCA 适配器上动态设置为 ConnectionSpec 的 JCA Connection Specification Properties。

要在不需要重新部署适配器的情况下使用不同的用户名和密码调用适配器,您需要:

  • 在属性子业务对象中的 BusinessGraph 中设置用户名和密码。
  • 在适配器导入中设置正确的 connectionSpec 类引用,例如: com.ibm.j2ca.sap.SAPConnectionSpec
  • 将适配器的 Authentication Properties 中的 Res. Auth. Property 设置为 Application。将缺省值设置为 Container。

用户名和密码属性使用特殊前缀“CS”,以便将它们标识为 Connection Spec 属性。为了设置“用户名”和“密码”,您需要在业务对象的属性元素中设置“CSusername”和“CSpassword”。下面的清单 1 显示了 SAP 适配器的代码示例,该代码示例从包装业务对象创建 BusinessGraph,并使用拥有新用户名和密码的“CSusername”和“CSpassword”设置属性业务对象。




清单 1. 设置“CSuserName”和“CSpassword”的示例代码

                

BOFactory dataFactory = (BOFactory) ServiceManager.INSTANCE.locateService(
			"com/ibm/websphere/bo/BOFactory");

DataObject createSapSalesOrderBOWrapper = dataFactory.createByElement(
			"http://SAPPrueba/ScaArtifacts/SAPOutboundInterface", 
			"createSapSalesOrderBOWrapper");

DataObject createSapSalesOrderBOWrapperInput = 
		createSapSalesOrderBOWrapper.createDataObject(
			"createSapSalesOrderBOWrapperInput");

DataObject sapSalesOrderBOWrapper = 
		createSapSalesOrderBOWrapperInput.createDataObject(
			"SapSalesOrderBOWrapper");

DataObject sapBapiSalesorderGetstatus = 
		sapSalesOrderBOWrapper.createDataObject(
			"SapBapiSalesorderGetstatus");

sapBapiSalesorderGetstatus.setString("Salesdocument", "documento");

// Create the property business object
DataObject prop = createSapSalesOrderBOWrapperInput.createDataObject("properties");

// Setting the property 'userName' to connection spec
prop.setString("CSusername", "SAPUSERNAME");
		   
//Setting the property 'password' to connection spec
prop.setString("CSpassword", "SAPPASSWORD");








回页首


示例方案

该部分介绍如何使用 IBM WebSphere Adapter for SAP 构建一个示例方案,以便使用动态身份验证。


图 1. 示例方案的模块化组装图
示例方案的模块化组装图

安装并配置 IBM WebSphere Adapter for SAP

本文不打算阐述如何安装和配置 WebSphere Adapter for SAP。有关使用 WebSphere Integration Developer(以下称为 Integration Developer)安装、配置和部署适配器的帮助信息,请参阅 WebSphere Adapter for SAP 文档

在示例方案中,通过使用 Integration Developer 中的 Enterprise Service Discovery 为具有 Create Operation 的示例 BAPI“BAPI_SALESORDER_GETSTATUS”配置一个简单的服务。在 Enterprise Service Discovery 过程中创建了接口“SAPOutBoundInterface”、一些数据类型和 EIS 导入。图 2 显示了创建的数据类型:


图 2. 示例方案的数据类型
示例方案的数据类型

如果已正确地安装、部署和配置了 SAP 适配器,则您应在 Integration Developer 中的 Business Integration View 中拥有一个 SCA 模块,并且组装关系图应类似于下面的图 3:


图 3. 带有 SAP EIS 导入的组装关系图
带有 SAP EIS 导入的组装关系图

在 EIS 导入中配置 ConnectionSpec 类名

  1. 右键单击组装图表中的 SAPOutboundInterface 导入,并选择 Show in Properties
  2. 单击 Binding Properties,然后选择 Connection 选项卡。
  3. 单击 Connection Spec,并选择类:com.ibm.j2ca.sap.SAPConnectionSpec


图 4. 在 SAP EISSet 导入中设置 Connection Spec 类
在 SAP EISSet 导入中设置 Connection Spec 类

将 Authentication Properties 中的 Res-Auth 字段设置为 Application

  1. 从上面最后一步的示例面板中选择 Authentication Properties
  2. 检查 Res Auth 字段,如果它被设置为 Container,则将它更改为 Application。


图 5. 在 SAP EIS 导入中设置 Res Auth
在 SAP EIS 导入中设置 Res Auth

创建新接口来测试该功能

创建一个附加接口,以便能够动态测试此功能。此接口会匹配原始的 SAPOutboundInterface,仅有一处不同:我们将添加几个输入参数,以便能够传递用户名和密码。

  1. 在 Business Integration 视图上,单击 File => New => Interface。将出现 New Interface Wizard。

    图 6. 创建新接口
    创建新接口


  2. 为新的接口输入一个名称(例如,SAPOutboundWithUserPwdInterface),并单击 Finish
  3. 添加与 SAPOutboundInterface 中带有两个用户名和密码附加输入参数和一个输出参数的操作匹配的请求/响应操作。您的接口应与下面图 7 所示的接口类似。

    图 7. 新接口
    新接口


创建设置 Properties 元素值的 Java 组件

  1. 在组装关系图中创建 Java 组件。
  2. 将显示的名称更改为“DynamicCS Properties”。
  3. 将 Java 组件连接到 SAPOutboundInterface 导入。将出现下面图 8 所示的消息。

    图 8. 创建匹配引用
    创建匹配引用


  4. 单击 OK,以便对 Java 组件中的接口创建匹配引用。在组装关系图中,您应看到以下内容(参见图 9):

    图 9. 组装关系图
    组装关系图


  5. 单击 Java 组件,并再次单击图标,以添加接口:

    图 10. 添加接口
    添加接口


  6. 在我们的示例 SAPOutboundWithUserPwdInterface 中,选择上一部分中创建的接口,并单击 OK,您会看到添加到 java 组件的接口图标:

    图 11. 组装关系图
    组装关系图


导出 Java 组件

  1. 在组装关系图中创建导出,并将其连接到 Java 组件。将弹出以下窗口。
  2. 单击 OK 并继续。这将允许在其他模块中使用该服务。

    图 12. 创建导出
    创建导出


  3. 确保最后的组装图与下面的图 13 类似。

    图 13. 组装关系图
    组装关系图


生成 Java 实现

为先前创建的 Java 组件生成 Java 实现。该实现将设置动态用户名和密码。

  1. 右键单击 Java component,并选择 Generate Implementation。将弹出一个窗口,要求您选择将在其中生成实现的包。
  2. 选择缺省值。提示:可以根据自已的决定使用任何其他包,这对本示例无关紧要。您将使用的 empty 方法与导出 wsdl 文件中的操作一样多。相关方法是 public DataObject createSapBapiSalesOrderGetStatusWrapper( DataObject createSapBapiSalesOrderGetStatusWrapperInput)
  3. 标识您要将其传递到 SAP 适配器的 BusinessGraph。

在我们的示例中,createSapBapiSalesOrderGetStatusWrapper 是 BusinessGraph createSapBapiSalesOrderGetStatusWrapperInput 的包装程序。我们需要在 BusinessGraph 的属性子对象中设置动态 Connection Specification 属性(在本例中是用户名和密码)。然后,我们将打包的 BusinessGraph 传递到将从 SAP 返回 SAP 业务对象的 SAP 适配器,接着将其传递回 Java 组件的调用方。下面是针对本示例的这一方法的完全实现:


清单 2. 方法的实现

                
public DataObject createSapBapiSalesOrderGetStatusWrapper(
			DataObject createSapBapiSalesOrderGetStatusWrapperInput, 
			String username, 
			String password) {
		
	DataObject prop= 
			createSapBapiSalesOrderGetStatusWrapperInput.getDataObject("properties");
	
	// check if they already created this child object or not
	if (null == prop) {
		System.out.println("***  Properties not found in this DataObject. " +
			"Creating properties child BO...");
		prop = createSapBapiSalesOrderGetStatusWrapperInput.createDataObject("properties");
	}
	
	// Setting the conn spec property 'username'
	// Note that the username property is prefixed by CS
	prop.setString("CSusername", username);  
	
	// the userName\password is used by reflection to create Method from it ,so           
	// this must match the ConnectionSpec getter-setter method string
		   
	// Setting the conn spec property 'password'
	// Note that the password property is prefixed by CS
	prop.setString("CSpassword", password);
	
	// invoke the adapter		
	Service serv= locateService_SAPOutboundInterfacePartner();
	Object boReturn= serv.invoke(
			"createSapBapiSalesOrderGetStatusWrapper",
			createSapBapiSalesOrderGetStatusWrapperInput);
	
	// return the result BO that we got back from SAP
	return (DataObject)boReturn;
}        







回页首


测试示例方案

要对导出启动测试组件,请执行下列步骤:

  1. 在 Integration Developer UTE 中启动 Process Server。

    图 14. 在 Integration Developer 中启动 Process Server
    在 Integration Developer 中启动 Process Server


  2. 将您的项目添加到服务器。启动服务器后,右键单击服务器,并选择选项 Add and Remove Projects(参见图 15):

    图 15. 添加删除的项目
    添加删除的项目


  3. 在组装关系图上右键单击导出,并选择 Test Component(参见图 16):

    图 16. 添加删除的项目
    添加删除的项目


  4. 为 SAP 业务对象输入适当的数据(在本例中是 BAPI),还要输入适配器用于登录 SAP 的用户名和密码。注意,如果在此处随机放置数据,SAP 很可能会因数据不正确而引发 BaseSAP 异常。 在测试组件面板中,可以看到顶层元素属于类型 BG。

    图 17. 测试组件面板
    测试组件面板


  5. 在面板的左下角,单击 Configurations 选项卡,然后选择两个模拟器,并单击 Remove

    图 18. 测试组件配置
    测试组件配置


  6. 在面板的左下角单击 Events 选项卡,然后单击 Continue(参见图 19)。

    图 19. 测试组件配置
    测试组件配置


如果您输入了正确的数据、用户名和密码,则测试应能够成功,并且会在测试组件面板中看到从 SAP 返回的对象。如果您无法为 SAP 业务对象输入正确的数据,则会遇到来自 SapBaseException 的业务异常。如果您无法输入正确的用户/密码组合,则会看到以下内容的 ResourceException:Exception in connecting to SAP:Error MsgName or password is incorrect.Please re-enter。您可以使用不同的用户名和密码组合尝试若干次,来了解如何完成数据输入。使用未知的用户名和/或密码进行尝试,以了解 SAP 如何抛出异常。





回页首


结束语

可以通过编程方式将 Connection Specification 属性传递到 JCA 适配器;因此,可以动态更改这些属性。本文通过一个使用 WebSphere Adapter for SAP 的示例,向您介绍了如何动态更改用户名和密码属性。此方法还可用于其他适配器。此功能适用于不同的方案,但是,我们在此处侧重介绍了基本方案,以便您可以将其应用到特定的方案中。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章