文章
· 七月 12, 2023 阅读大约需 3 分钟

第五十六章 开发Productions - ObjectScript Productions - 不常见的任务 - 在适配器类中包含凭据

第五十六章 开发Productions - ObjectScript Productions - 不常见的任务 - 在适配器类中包含凭据

在适配器类中包含凭据

要在适配器类中包含生产凭证,请在类定义中执行以下操作:

  • 包括名为 Credentials 的设置。
  • 定义一个名为 CredentialsSet() 的方法,该方法使用 Credentials 设置的值作为键来查找 Credentials 表中的用户名和密码。然后实例化一个包含用户名和密码的凭据对象。

覆盖Production凭证

虽然Production凭证系统集中管理并将登录数据保留在源代码之外,但有时需要编写代码以从其他来源获取凭证。例如,代码可能会从 Web 表单或 cookie 中检索用户名和密码,然后将它们与 HTTP 出站适配器一起使用以连接到其他站点。

处理此问题的方法是在业务服务或业务操作代码中,在调用任何适配器方法之前执行以下两项操作:

  • 提供实例化凭证对象并向其分配用户名和密码值的代码
  • 请勿随后设置适配器 Credentials 属性或调用适配器 CredentialsSet() 方法,否则值可能会被重置。
  If ..Adapter.Credentials="" {
     Set ..Adapter.%CredentialsObj=##class(Ens.Config.Credentials).%New()
  }
  Set ..Adapter.%CredentialsObj.Username = tUsername
  Set ..Adapter.%CredentialsObj.Password = tPassword

此类代码提供了的 EnsLib.HTTP.OutboundAdapter 可以使用的凭据对象,但该对象内的值并非来自 Credentials 表。

覆盖启动和停止行为

IRIS 提供了一组回调方法,可以覆盖这些方法,以便在Production、其业务主机或其适配器的生命周期期间的开始和停止时间添加自定义处理。默认情况下,这些方法什么都不做。

Production类中的回调

如果有必须在Production开始前执行的代码,但需要 IRIS Production框架在其执行前运行,则必须覆盖Production类中的 OnStart() 方法。将这些代码语句放在 OnStart() 中,以便它们以正确的顺序执行:也就是说,在 IRIS 启动之后,但在Production开始接受请求之前。 OnStop() 方法还可用于在Production完成关闭之前执行一组任务。

Business Host 业务主机类中的回调

每个业务主机(业务服务、业务流程或业务操作)都是 Ens.Host的子类。在这些类中的任何一个中,都可以重写 OnProductionStart() 方法,以提供希望 IRISProduction启动时代表该主机执行的代码语句。还可以实现 OnProductionStop() 方法。

例如,如果Production需要对属性值进行不同的初始设置,请在业务操作的 OnInit() 方法中设置该值。例如,要将 LineTerminator 属性的初始设置更改为取决于操作系统:

 Method OnInit() As %Status
  {
      Set ..Adapter.LineTerminator="$Select($$$isUNIX:$C(10),1:$C(13,10))"
      Quit $$$OK
  }

适配器类中的回调

适配器类可以覆盖 OnInit() 方法。在创建适配器对象并设置其可配置属性值后调用此方法。 OnInit() 方法为适配器提供了一种执行任何特殊设置操作的方法。

例如,以下 OnInit() 方法在适配器启动时建立与设备的连接 — 假设该适配器还实现 ConnectToDevice() 方法:

Method OnInit() As %Status
{
  // Establish a connection to the input device
  Set tSC = ..ConnectToDevice()
  Quit tSC
}

适配器类还可以重写 OnTearDown() 方法。在适配器对象被销毁之前关闭期间调用此方法。 OnTearDown() 方法为适配器提供了一种执行任何特殊清理操作的方法。

例如,以下 OnTearDown() 方法会在适配器停止时关闭与设备的连接,假设此适配器还实现了名为 CloseDevice() 的方法:

Method OnTearDown() As %Status
{
  // close the input device
  Set tSC = ..CloseDevice()
  Quit tSC
}
讨论 (0)1
登录或注册以继续