文章 姚 鑫 · 十二月 17, 2022 3m read

第十六章 使用系统监视器 - 系统监视器默认值

系统监视器默认值

System Monitor 调用一组提供的可以扩充的类,在 %SYS 命名空间中运行,并在三个可以更改的默认设置下运行。

默认系统监视器组件

IRIS 提供了五个类,默认情况下在 命名空间的系统监视器中配置。

Sensor classes:

  • SYS.Monitor.SystemSensors

系统传感器类获取传感器值传递给配置的订阅者类,包括系统监控订阅者(SYS.Monitor.SystemSubscriber)和健康监控订阅者()。

  • %SYS.Monitor.AppMonSensor

为 提供传感器、订阅者和通知服务的类;获取传感器值并将它们存储在本地命名空间中,根据用户定义的警报评估值,并根据警报定义生成电子邮件消息或在触发警报时调用用户指定的方法。

:

  • SYS.Monitor.Health.Control

Health Monitor 的订阅者类;从 接收和评估统计传感器值,并将通知发布到系统通知程序。

适用于所有传感器类别的系统监视器订阅者;包含监视和分析 中的传感器所需的所有代码。为某些传感器生成系统监视器通知和健康监视器通知。

:

适用于所有订户类别的系统通知程序。在收到来自系统订阅者 (SYS.Monitor.SystemSubscriber) 或健康监视器订阅者 (

0
0 175
文章 姚 鑫 · 十二月 16, 2022 2m read

第十五章 使用系统监视器 - 系统监控健康状态

基于发布到消息日志的通知,包括由IRIS 实例直接生成的系统警报以及由 System Monitor 和它的 Health Monitor 组件 在共享内存中的寄存器中维护一个总结整个系统健康状况的单一值。

在启动时,系统健康状态是根据在启动过程中发布到消息日志的系统(而不是系统监视器)警报的数量来设置的。系统监视器运行后,可以通过系统警报或系统监视器警报或警告来提升健康状态。自上次系统警报或系统监视器警报或警告发布后 分钟过去后,状态将清除到下一个较低级别。下表显示了如何确定系统健康状态。

State Set at startup when ... Set following startup when ... Cleared to ...
GREEN (0)
0
0 168
文章 姚 鑫 · 十二月 15, 2022 3m read

第十四章 使用系统监视器 - 跟踪系统监视器通知

通常,应调查任何系统监视器警报(严重性 2 的通知)或系统监视器警告序列(严重性 1)。 Health Monitor 还可以生成系统监视器警报和警告。

系统监视器警报、警告和状态消息(严重性 )被写入消息日志 ()。 (所有系统监视器和健康监视器状态消息都写入系统监视器日志,install-dir\mgr\SystemMonitor.log。应用程序监视器警报不会写入日志,但可以通过电子邮件发送或传递给指定的通知方法。 )

要跟踪系统监视器警报和警告,可以执行以下操作:

  • 使用 ^%SYSMONMGR 实用程序查看系统监视器警报。此选项允许显示所有传感器或特定传感器的警报,并查看所有记录的警报或仅查看在指定时间段内发生的警报,但它不显示警告。
  • 监控消息日志。请记住,当在短时间内为给定传感器生成一系列系统监视器警报时,只有第一个会写入消息日志。

注意:在消息日志中,System Monitor 状态通知以首字母大写标记,例如 以 开头,而 、 和 消息则以大写标记,例如 (警告值为 )。

配置 以发送消息日志中出现的警报(和可选警告)的电子邮件通知(而不是将它们写入警报日志,这是默认设置)。

0
0 159
文章 姚 鑫 · 十二月 14, 2022 4m read

第十三章 使用系统监视器 - 系统监视器

System Monitor 是一种灵活的、用户可扩展的实用程序,用于监控 数据平台实例,并在一个或多个指标的值表明存在潜在问题时生成通知。如所提供的,System Monitor 包含以下实例监控工具:

  • System Monitor 监控系统状态和资源,根据固定参数生成通知(警报和警告)并跟踪整体系统健康状况。
  • Health Monitor 对关键系统和用户定义的指标进行采样,并将它们与用户可配置的参数和建立的正常值进行比较,当样本超过适用的阈值时生成通知。
  • Application Monitor 对重要的系统指标进行采样,将值存储在本地名称空间中,并使用用户创建的警报定义对其进行评估。触发警报时,它可以生成电子邮件通知或调用指定的类方法。

默认情况下,这三个工具都在 命名空间中运行。 和 Application Monitor 可以选择在特定于命名空间的配置和设置下的其他命名空间中运行。可以定义和配置自己的组件,以根据需要在每个命名空间中扩展系统监视器的功能。

系统监视器

对重要的系统状态和资源使用指标进行采样,例如 连接状态和使用中的锁表百分比,并根据固定状态和阈值生成通知——警报、警告和“状态正常”消息。这些通知被写入消息日志,允许 Log Monitor

0
0 264
文章 姚 鑫 · 十月 23, 2022 3m read

第二十五章 CSP Session 管理 - 选择策略时的注意事项

组的注意事项

本节包含创建身份验证组时要考虑的一些要点。

  1. 仅当决定必须通过会话对象共享数据时才使用会话共享。 By-ID 和登录 Cookie 共享更加强大和可预测。
  2. 创建组时,尽可能保持一致,以便为目标用户创建统一的行为。不要将应用程序同时放在 By-ID 组和 组中。使用不同的身份验证策略可能会导致意外行为。 By-ID 优先于 。因此,如果一个应用程序两者都有,它会保持同步 。
  3. 对组的所有成员使用相同的身份验证类型。特别是,如果组中的某些应用程序允许登录 而其他应用程序不允许,则通过用户名/密码进入组会验证整个组,而通过登录 输入只会验证部分应用程序。这可能会导致用户对为什么有时需要登录而有时不需要登录感到困惑。
  4. CSP 服务器认为每个应用程序都在一个身份验证组中。会话中的一个单独的应用程序形成一个单实体 身份验证组。)
  5. 尽量不要将未经身份验证的应用程序放在 By-ID 组中。
  6. 组很脆弱;使用 是一种更稳健的方法。由于有关组的所有信息(包括其共享数据)都包含在单个会话中,因此该组很容易丢失。这是因为会话可能会超时,即在特定时间后会话会自动销毁。如果用户离开他的计算机或使用不在 组中的应用程序,则会话可能会超时。如果组中的应用程序之一标记 ,则该组被分散。
0
0 163
文章 姚 鑫 · 十月 22, 2022 4m read

第二十四章 CSP Session 管理 - 认证架构

认证架构

安全上下文和粘性登录

应用程序在会话中运行。会话需要运行应用程序的安全上下文。安全上下文包含身份验证状态。

By-SessionsBy-ID Groups 有一个粘性登录,它会记住会话或组中使用的最后一个应用程序的安全上下文。如果组应用程序中的用户以其他用户身份登录,则会更新粘性登录。 (如果用户登录到未经身份验证的应用程序,则粘滞登录不会更新。)

在会话中跳转到应用程序时,会话会尝试使用适合目标应用程序的粘性登录。如果粘性登录与会话的当前安全上下文不匹配,并且应用程序可以接受粘性登录中的身份验证方法,则会话的安全上下文切换到粘性上下文中的安全上下文。

会话结束时,会话的粘性登录会丢失。当包含该组的任何应用程序的所有会话都结束时,该组的粘性登录将丢失。

初始登录后,组有一个关联的粘性登录对象,它在进入组的一个应用程序时尝试使用该对象。当组中的应用程序输入为 UnknownUser 时,粘性登录不会更新,因为这会将组中的所有其他应用程序移动到未经身份验证的安全上下文中。

如果粘性登录包含经过双重身份验证的用户,则该双重身份验证用于非双重身份验证应用程序,只要用户名身份验证在两个应用程序中匹配即可。

级联认证

CSP 服务器在尝试获取应用程序的身份验证信息时使用优先级。

0
0 109
文章 姚 鑫 · 十月 20, 2022 4m read

第二十二章 CSP Session 管理 - Private Pages

CSP 提供了私有页面的概念。只能从同一 CSP 会话中的另一个页面导航到私有页面。私有页面对于想要限制对某些页面的访问的应用程序很有用。

例如,假设有一个名为 private.csp 的私有页面( 示例页面之一)。用户无法直接导航到 private.csp(例如,通过输入其 )。用户只能从另一个 页面中包含的链接导航到 。引用 页面中包含的链接不能是绝对 ,以 开头。只有相对于引用页面的路径才被私有页面方法正确加密/标记。即:下面的前两个链接将相同的令牌传递给目标私有页面 。

<A HREF='test2.csp'>Link to private page - relative path</A> <BR>
<A HREF='/csp/samples/test2.csp'>
       Link to private page - full application path</A> <BR>

此链接的散列方式不同,无法访问。

<A HREF='http://myserver/csp/samples/test2.csp'>
        Link to private page - absolute path</A>
0
0 128
文章 姚 鑫 · 十月 19, 2022 2m read

第二十一章 CSP Session 管理 - 身份验证和加密

身份验证和加密

在发送到 HTTP 客户端的页面上放置状态信息是很常见的。当从这些页面发出后续请求时,会将状态信息发送回服务器。很多时候,重要的是将状态信息放置在网页上,以便 a) HTTP 源的查看者无法确定状态信息的值,并且 b) 服务器可以验证返回的信息是,实际上,从同一服务器和会话发送出去。通过其加密服务,CSP 提供了一种易于使用的机制来实现这一点。

Session Key

可以使用加密密钥对服务器上的数据进行加密和解密。每个 都有一个唯一的会话密钥(可通对象 Key 属性中的 访问),用于加密会话数据。这种机制是安全的,因为会话密钥永远不会发送到 客户端;它作为 的一部分保留在 服务器上,位于对象中。

可以在类中使用 的 方法手动加密服务器上的值。可以随后使用 Decrypt 方法解密此值。

加密 URL 和 CSPToken

在某些情况下(如下所述),从 文件生成的类会自动加密发送到客户端的 值(对于手动创建的类,必须在类中调用 %CSP.Page的 方法才能执行此操作)。

例如,假设 文件包含定义指向另一个页面的链接的锚标记:

<a href="page2.csp?PI=314159">Page 2</a>

如果此

0
0 212
文章 姚 鑫 · 十月 19, 2022 7m read

CORS请求Request携带Cookie失败占用License解决方案

起因

  1. 因为是前后端分离的项目,前端使用的vue2,后端iris。需要获取cooike的,每次请求时携带,防止每次请求都占用一个。

  2. 登录认证,保持会话期间全局变量,超时退出。

现象

下图是如果不携带cookie每次请求都会新建一个并且占用一个license

image

解决过程

所以基于上述情况,需要每次获取响应的cookie,保存下来,下次请求再携带保存下来的。

如图Set-Cookie内容:

  • CSPSESSIONID - 为SessionID
  • - 服务器,负载均衡时会用到,如果不对应,则会报错。

后端方法为%CSP.Response的:

Method WriteHTTPHeaderCookies()
{
	#Dim c,cookie,port,cookiepath
	s ^yx("yx","UseSessionCookie") = %session.UseSessionCookie
	s ^yx("yx","CSPSessionCookie") = %session.CSPSessionCookie
	s ^yx("yx","SecureSessionCookie") = %session.SecureSessionCookie
	If $isobject($get(%session)),%session.UseSessionCookie,i%OutputSessionToken,%session.CSPSessionCookie'="" {
		Set cookie="CSPSESSIONID",cookiepath=i%CookiePath
		If $extract(cookiepath,*)'="/" Set cookiepath=cookiepath_"/"
		If $data(%request.CgiEnvs("SERVER_PORT"),port) Set cookie=cookie_"-SP-"_port
		Set cookie=cookie_"-UP-"_$translate($extract(cookiepath,2,*),"/","-")
		Set cookie=cookie_"="_$select(i%OutputSessionToken=2:"",1:%session.CSPSessionCookie)_"; path="_$zcvt($zcvt(cookiepath,"O","UTF8"),"O","URL")_"; "_$select(%session.SecureSessionCookie:" secure;",1:"")
		if i%UseHttpOnly {
			Set cookie=cookie_" httpOnly;"
		}
		Write "Set-Cookie: "_cookie,!
		$$$SysLogTag(2,"CSPResponse","[WriteHTTPHeaderCookies] Session cookie: "_cookie,"", %request.RequestId)
		s ^yx("Set-Cookie:") = cookie
		
		Set %session.CookiePath=$get(cookiepath)
	}

	Set c=""
	For {
		Set c=$order(i%Cookies(c)) Quit:c=""
		Set name=i%Cookies(c,"n")
		Write "Set-Cookie: ",name,"=",i%Cookies(c,"v"),";"
		Write:i%Cookies(c,"e")'="" " expires=",i%Cookies(c,"e"),";"
		Write:i%Cookies(c,"p")'="" " path=",i%Cookies(c,"p"),";"
		Write:i%Cookies(c,"d")'="" " domain=",i%Cookies(c,"d"),";"
		Write:i%Cookies(c,"s") " secure;"
		Write:i%Cookies(c,"h") " httpOnly;"
		Write !
	}
}
0
0 505
文章 姚 鑫 · 十月 18, 2022 3m read

第二十章 CSP Session 管理 - 状态管理

状态管理

因为 HTTP 是无状态协议。为 Web 编写的应用程序必须使用特殊技术来管理应用程序上下文或状态。 CSP 提供了许多用于状态管理的机制。这些中的每一个都可能适用于特定情况。

请求之间的跟踪数据

应用程序中状态管理的基本问题是跟踪连续 请求之间的信息。有许多可用的技术,包括:

  • 使用隐藏的表单字段或 URL 参数在单个页面上存储数据
  • 将数据存储在客户端的 cookie
  • 将数据存储在服务器上的对象中的 %CSP.Session
  • 在 数据库中存储数据

在页面中存储数据

要将状态信息存储在页面中,必须放置它以便来自该页面的后续请求包含该信息。

如果页面通过超链接发出请求,则数据应放置在超链接的 中。例如,这是一个包含在 文件中定义的状态信息的超链接:

当 为包含此链接的页面提供服务时,表达式 #(data)# 将替换为发送给客户端的文本中的服务器变量 的值。当用户选择这个指向 的链接时, 服务器可以通过 对象访问 的值。如果需要, 可以对此类数据进行编码。

如果页面包含表单,可以将状态信息放置在隐藏字段中:

与超链接示例一样,当将此表单发送到客户端时,表达式 将替换为变量 的值。当用户提交此表单时,可以通过 对象获得 的值。

0
0 149
文章 姚 鑫 · 十月 17, 2022 3m read

第十九章 CSP Session 管理 - %CSP.Session 对象

对象中的 %CSP.Session 包含有关当前Session的信息以及以编程方式控制会话各个方面的方法。

User Session Data

可以使用其 Data 属性将 中的应用程序特定信息存储在对象中。数据是一种多维数组属性,可让关联多维数组中的特定信息。该数组的内容会在会话的整个生命周期内自动维护。

可以像使用任何其他 ObjectScript 多维数组一样在对象 属性中使用 %CSP.Session

例如,如果在 方法中执行以下代码:

 Set %session.Data("MyData") = 22

然后对同一会话的后续请求(无论哪个类处理请求)在对象中的 中看到此值:

注意:理解为全局变量。

在 中存储应用程序特定数据的能力是一项非常强大的功能,但应该正确使用。进一步讨论请参阅“状态管理”部分。

设置用户数据 - 设置命令

要在对象的 %CSP.Session 中存储数据(仅文字数据 — 不是对象引用),请使用 数组中的每个节点都可以包含最多 个字符的字符串。

 Set %session.Data("MyData") = "hello"
 Set %session.Data("MyData",1) = 42
0
0 134
文章 姚 鑫 · 十月 16, 2022 4m read

第十八章 CSP Session 管理 - 与 CSP.Session 的Sessions

`` 是一种无状态协议;每个请求都不知道以前的请求。虽然这适用于为用户提供简单静态内容的网站,但它使得开发交互式动态 Web 应用程序变得困难。为了解决这个问题,CSP 提供了所谓的Session 管理。

与 的

Session 话表示在特定时间段内从特定客户端到特定应用程序的一系列请求。

CSP 自动提供会话跟踪;无需执行任何特殊操作即可启用它。 CSP 应用程序可以通过对象中的 %CSP.Session 查询和修改其会话的各个方面。 服务器通过 变量使该对象可用。

Session 会话创建

当 客户端向 CSP 应用程序发出第一个请求时,会话开始。

创建新session时, 服务器会执行以下操作:

  1. 创建一个新的会话 号。
  2. 酌情执行许可检查。
  3. 在对象(持久)中创建 的新实例。
  4. 调用当前事件类(如果存在)的 OnStartSession 方法。
  5. 创建一个 以便在会话过程中跟踪来自 客户端的后续请求。如果客户端浏览器禁用了 , 会自动使用 重写(在每个 中放置一个特殊值)来跟踪。

对于的第一个请求,对象中的 的 属性设置为 。对于所有后续请求,它设置为 :

0
0 198
文章 姚 鑫 · 十月 15, 2022 2m read

第十七章 CSP 中的 HTTP 请求 - %CSP.Response 对象和 OnPreHTTP 方法

%CSP.Response 对象和 OnPreHTTP 方法

可以使用对象中的 %CSP.Response 控制将哪些响应标头发送回 HTTP 客户端。 CSP 服务器自动创建此类的一个实例,并将对它的引用放在变量 中。

由于 对象控制 标头,因此通常在类中的 %CSP.Page 的 方法中设置其属性。例如,要重定向传入的 请求,请定义以下 方法:

Class MyApp.Page Extends %CSP.Page
{
// ...

ClassMethod OnPreHTTP() As %Boolean
{
    Set %response.ServerSideRedirect = "C:\CacheSys\csp\samples\redirect.csp"
    Quit 1
}
}

如果使用 CSP 类创建 CSP 页面,请使用以下代码设置标题值:

Class MyPage Extends %CSP.Page
{
ClassMethod OnPreHTTP() As %Boolean
{
    Do %response.SetCookie("name","value")
    Quit 1
}
0
0 124
文章 姚 鑫 · 十月 14, 2022 3m read

第十六章 CSP 中的 HTTP 请求 - %CSP.Request 对象

%CSP.Request 对象

CSP 服务器响应 HTTP 请求时,它将有关传入请求的信息打包到对象中的 %CSP.Request 实例中。可以使用变量 来引用此对象。

URL 属性

要查找传入 请求的 (不包括查询字符串),对象中使用 %CSP.Request 的 属性:

 Write "URL: ", %request.URL

数据属性和 参数

可能包含参数列表(也称为 查询)对象中的 通过其 属性使这些可用。

例如,假设传入的 URL 包含:

/csp/user/MyPage.csp?A=10&a=20&B=30&B=40

可以使用以下命令在服务器上检索这些参数:

 Write %request.Data("A",1)    // this is 10
 Write %request.Data("a",1)    // this is 20
 Write %request.Data("B",1)    // this is 30
 Write %request.Data("B",2)    // this is 40
0
0 200
文章 姚 鑫 · 十月 13, 2022 2m read

第十五章 CSP 中的 HTTP 请求 - 处理 CSP 错误

处理 CSP 错误

%CSP.Error是默认的 CSP 错误页面。将其用作创建的任何错误页面的超类。可以使用 %CSP.Error中提供的功能从错误中提取信息。

在授予许可证之前处理 错误

如果已经有一个现有会话并且用户尝试转到一个未找到的页面, 将显示标准错误页面,因为该会话已经有一个许可证。

如果 CSP 应用程序还没有许可证,并且发生以下任何错误,则 CSP 默认显示标准 Web HTTP/1.1 404 Page Not Found 错误消息。可以通过在错误页面(通常是 %CSP.Error的子类)上为应用程序设置以下参数来更改在授予许可之前遇到错误时显示的页面。

如果生成以下错误,CSP 会查看 参数的值:

Cannot grant license.

可以有以下两个值:

  • "" — 返回 HTTP/1.1 404 Page Not Found 错误(默认)

  • 静态 HTML 页面的路径 — 显示命名的静态页面,例如 /csp/samples/static.html

如果生成以下任何错误, 会查看 参数的值:

可以有以下三个值:

  • — 返回 错误(默认)
  • 1
0
0 253
文章 姚 鑫 · 十月 12, 2022 3m read

第十四章 CSP 中的 HTTP 请求 - CSP.Page 类

CSP 服务器上,所有 HTTP 请求都通过调用由类中的 %CSP.Page 定义的方法来处理。类中的 从不直接处理请求本身;它只是定义了处理 请求所需的接口。实际的事件处理的 的子类完成(手动创建或作为处理 源文件的结果)。

%CSP.Page 的子类永远不会被实例化;也就是说,不会在对象中创建 %CSP.Page%CSP.Page 定义的方法都是类方法,不需要对象即可调用。正如我们将看到的,这些方法所需的任何状态信息都由 服务器管理的其他对象(例如 和对象中的 )提供。

Page 方法

在 服务器确定类中的哪个 %CSP.Page 应该处理请求后,它会设置适当的处理上下文,然后调用该类的 Page 方法。设置处理上下文包括重定向标准输出设备 (),以便将所有输出(使用 命令)发送回 客户端并创建任何所需对象的实例(例如 、 和 对象)或局部变量。

方法处理对 请求的完整响应。它通过按顺序调用回调方法 、 和 来做到这一点。这些被称为回调方法,因为子类可以覆盖它们以提供自定义行为。

方法负责写出 响应的标头。这包括内容类型和 等信息。默认行为是将内容类型设置为 。在需要更直接地控制响应标头的情况下,通常只需要覆盖 方法。

方法执行响应 请求的大部分工作。

0
0 280
文章 姚 鑫 · 十月 11, 2022 3m read

第十三章 CSP 中的 HTTP 请求 - CSP 服务器事件流

CSP 服务器收到来自 CSP 网关的请求时,它会确定该请求是针对静态页面还是针对 CSP 类的。如果是静态页面,它会立即将页面发回。如果是针对 类,它会执行以下操作:

  1. 确定此请求属于哪个会话。如果没有,它会启动一个新会话。
  2. 确保在正确的 Caché 命名空间中处理请求。
  3. 确保对象中正确的 %CSP.Session可用,并根据 请求中包含的信息在对象中创建 %CSP.Request 的实例。如果需要任何解密,它也会这样做。
  4. 构造 对象以允许应用程序修改响应标头。
  5. 确定应由哪个类处理请求并调用其 方法(该方法又调用 回调方法)。

CSP 服务器 URL 和类名称解析

服务器通过解释其 来确定将 HTTP 请求分派到哪个类。 将 分解为以下组件:

Component Purpose
http:// 协议
localhost 网络服务器地址
[] 可选, 服务器正在运行的端口号;默认为端口
/csp/samples/ 目录
文件名和扩展名
查询

协议和服务器地址由 服务器处理,与 服务器无关。该目录用于确定 URL 引用的 应用程序。每个 配置都可以定义多个 应用程序,这些应用程序由 的目录部分标识。每个

0
0 154
文章 姚 鑫 · 十月 10, 2022 3m read

第十二章 CSP 中的 HTTP 请求 - CSP 运行时环境

CSP 的主要任务是提供动态内容以响应传入的 (超文本传输协议)请求。本节介绍 CSP 如何处理 请求的基础知识。

是一种简单的协议,其中客户端向服务器发出请求。 是一种无状态协议;客户端和服务器之间的连接只持续为服务请求所需的时间。每个 HTTP 请求都包含一个请求标头,该标头指定请求类型(例如 或 )、一个 和一个版本号。请求还可能包含附加信息。 自动确定它应该处理哪些 请求,将它们分派到运行在 服务器上的适当类,并将请求信息打包成易于使用的对象(例如对象中的 )。

CSP 运行时环境

下图显示了 和 请求的架构:

应用程序的运行时环境包括以下内容:

  • HTTP 客户端(例如 Web 浏览器)
  • HTTP 服务器( 服务器,例如 或 )
  • 网关( 服务器的 Caché 插件)
  • 服务器( 服务器在其上运行请求的 应用程序)

HTTP 请求处理

下图说明了 处理 请求时的事件流:

  1. 浏览器(或类似的 客户端)发出 请求。
  2. 服务器确定这是一个 请求并将其分派到 网关(安装在 Web 服务器上)。 2a 服务器可能会提供静态内容,具体取决于应用程序配置。
  3. 网关重新打包请求并将其发送到正确的缓存服务器。
0
0 184
文章 姚 鑫 · 十月 9, 2022 3m read

第十一章 CSP 架构 - Web Application Settings

Special Case: DeepSee

对于使用 DeepSeeWeb 应用程序,它需要访问 %DeepSee 包中的所有类。要使特定应用程序能够使用 ,请在 命名空间中使用以下命令:

Do EnableDeepSee^%SYS.cspServer("/csp/webapp/")

其中 是带有斜杠的 应用程序名称。前面的命令等价于以下命令:

Set ^SYS("Security","CSP","AllowClass","web-app-name","%DeepSee.") = 1
Set ^SYS("Security","CSP","AllowClass","web-app-name","%CSP.UI.Portal.About")=1

其中 是带有尾随冲突的 Web 应用程序的名称。请注意,第一行使用 。有一个尾随句点。

或者,要使所有应用程序都能使用 ,请使用以下变体:

Do EnableDeepSee^%SYS.cspServer(0)

例如,要启用 /csp/webapp Web 应用程序以使用 ,请使用以下命令:

要禁止特定 应用程序使用 DeepSee,请使用以下命令:

编辑 应用程序设置

可以在管理门户的编辑 应用程序页面上创建或修改 如何处理特定

0
0 188
文章 姚 鑫 · 十月 8, 2022 2m read

第十章 CSP 架构 - Category

Category: AllowPrefix

如果应用程序依赖于调用以同一组字符开头的多个类或包,请使用AllowPrefix选项。

重要提示:如果应用程序依赖于调用上面列出的以外的任何类,则使用它可能是不安全的。建议确定是否需要调用此类,并为部署执行风险评估,以便了解使类可用的含义。

要使给定的Web应用程序能够调用以相同字符集开头的类或程序包,请在命名空间中使用以下命令:

Set ^SYS("Security", "CSP", "AllowPrefix", "web-app-name", "prefix") = value

其中

  • Web-app-nameWeb应用程序的名称,后跟一个尾随斜杠。

要使所有Web应用程序都能使用给定的类或包,请将web-app-name指定为;在这种情况下,可以省略括起来的引号。

  • 前缀是名称的前几个字符。

  • 值为10

如果将其指定为1,则Web应用程序可以调用这些类(或包)。

如果将其指定为,则此Web应用程序无法调用这些类(或包)。

例如,要使应用程序能够调用整个包,请使用以下命令:

请注意,前缀是 ,前缀中的句点表示应用程序无法访问等包。但是,应用程序可以访问包和。

再举一个例子,要使所有应用程序都能够访问以开头的所有包,请使用以下命令:

再举一个例子,假设 应用程序应该能够访问 % 包中除类

0
0 160
文章 姚 鑫 · 十月 7, 2022 4m read

第九章 CSP 架构 - CSP 应用程序设置

CSP 应用程序设置

CSP 服务器接收到传入的 HTTP 请求时,它使用本地 CSP 应用程序设置来确定如何处理请求。本节介绍 如何使用 应用程序设置处理 应用程序请求。

启用对 页面的应用程序访问

以下规则管理对页面和类的访问:

  1. 默认情况下,允许用户应用程序访问以下页面:
  • 允许 /csp/sys/ 应用程序及其所有子应用程序的页面
  • 允许使用 isc/studio/templates//isc/studio/usertemplates/ 应用程序的页面
  1. 默认情况下,允许用户应用程序访问所有非 % 类
  2. 用户应用程序还可以访问以下类:
  • %CSP.Broker, , %CSP.Login, , 被允许
  • 和 是允许的,有以下附加条件
    • 不允许所有其他 %ZEN.*
    • 允许所有其他 %Z*
  • 允许所有 类

除了检查 应用程序中的设置外,还会检查允许的类。可以通过导航到管理门户上的系统管理 > 安全 > 应用程序 > Web 应用程序来查看和更改应用程序设置。因此,类引用必须通过两组测试才能被允许。

要允许访问其他类,请在 命名空间中配置 ,其中 是 、 或 。以下部分描述了这些选项

重要提示:首先应用默认规则,然后按列出的顺序应用类别来完成检查。此外,每个关键字都可以被多次调用。

0
0 197
文章 姚 鑫 · 十月 6, 2022 4m read

第八章 CSP 架构 - CSP 网关配置

CSP 网关配置

CSP 网关是安装在 Web 服务器上并由其加载的 DLL 或共享库。 网关检测对扩展名为 或 的文件的任何请求,并将它们发送到定义的 服务器进行处理。

CSP 网关管理器

可以使用 网关管理器( 网关管理页面)或直接编辑其配置文件 csp.ini 来配置 网关。

网关管理器是一个小型 应用程序,可以在浏览器中使用它。您可以通过导航到系统管理 > 配置 > CSP 网关管理来访问 网关管理器。默认情况下,它会访问专用 服务器的 网关管理器。

要访问生产 服务器的 网关管理器,请根据需要通过替换 或 localhost:<port_no> 来更改 。

有关配置 网关的信息,请导航至系统管理 > 配置 > CSP 网关管理,然后单击帮助。有关更多详细信息,请参阅 网关配置指南。

注意:CSP Web 网关管理页面的本地化仅基于安装的 的内容(如果有)。如果不存在本地化文件,则 管理页面默认使用嵌入的英文文本。浏览器的语言设置对此机制没有影响。

定义服务器访问

注意:为防止运行时错误,对于通过 运行的高可用性配置, 建议使用启用了粘性会话支持的硬件负载平衡器。

可以定义此 网关可以访问的服务器列表(可能运行 CSP 应用程序的

0
0 144
文章 姚 鑫 · 十月 5, 2022 3m read

第七章 CSP 架构 - URL 的 Web 服务器配置

URLWeb 服务器配置

提供了一个默认的 /csp 虚拟目录来运行 应用程序。如果正在运行多个 Caché 实例,它还提供了一个默认虚拟目录 以供使用。如果正在运行多个 实例并使用虚拟目录 访问 应用程序,而之前没有 /,它将访问最后安装的 版本。如果计划允许使用以 http://localhost/csp 或 http//localhost/cacheinstance/csp 开头的应用程序路径调用所有 应用程序,则无需在 Web 服务器中进行任何更改配置。

如果要创建一个应用程序路径不是以 或 开头的 CSP 应用程序,则需要在 服务器配置文件条目中进行更改,别名 。

下表显示了需要更改的配置文件。

网络服务器 配置文件
ApacheHP 安全网络服务器 UNIX®: Windows: \conf\httpd.conf
如“在 服务器上配置新 ”中所述定义虚拟目录。

下表显示了使用 服务器和 实例的组合访问 页面的示例:

URL web server Instance
http://localhost/cache20071/csp/samples/menu.csp public
0
0 201
文章 姚 鑫 · 十月 4, 2022 3m read

第六章 CSP 架构 - 静态文件

静态文件

数据库服务器为所有 CSP 提供服务。 数据库服务器还可以通过 CSP 网关为 Web 应用程序提供任何类型的静态文件。在标准 应用程序中, 服务器通常提供静态内容。要在 上运行 应用程序,必须配置 服务器以允许服务器通过 网关提供所有静态文件。

注意:要运行基于 Zen 的应用程序,请启用“服务文件”选项并配置 Web 服务器以允许 服务器提供静态文件。然后 框架将能够提供依赖图像和 帮助文档。

指示字符编码

引擎通过流服务器以与主流 Web 服务器一致的方式处理静态文件,以确定 文件的字符编码。

现代惯例是将所有 文件标记为 的 ,并且确保页面上使用的所有 文件都是这种情况。

以这种方式标记的 文件:

  • 如果文件包含 (字节顺序标记),浏览器会自动检测到这一点并使用正确的字符集来读取它。
  • 如果该文件不包含 ,则浏览器假定该文件是 。

如果需要覆盖此行为以指定 JavaScript 文件的字符集,请将全局 设置为列表值 。例如,

SET ^%SYS("CSP", "MimeFileClassify", "JS") = $listbuild("text/javascript", 0 ,"ISO-8859-1") 
0
0 144
文章 姚 鑫 · 十月 3, 2022 2m read

第五章 CSP 架构 - 组件,信息流

CSP 组件:Web 服务器、CSP 网关、 服务器

使用三个软件组件: 服务器、CSP 网关和 服务器(在 服务器上运行):

  • CSP 组件

服务器和CSP服务器可以由一台或多台计算机实现。在开发过程中,所有三个组件(Web 服务器、 网关和 服务器)可能都位于一台 上。在大规模部署中,可能有多个 服务器和 服务器采用两层或三层配置。

这些组件( 服务器、 网关、 服务器)视为各有一个。它将 描述为好像只提供 页面,尽管 也可以提供 页面,以及其他文本格式和二进制格式,例如图像。

每个组件的作用

服务器是一个软件实用程序,它执行以下操作:

  • 接受传入的 HTTP 请求,通常来自浏览器
  • 检查权限
  • 可以提供静态内容
  • CSP 网关发送对 内容(以 或 结尾的 )的请求

CSP 网关是一个共享库、一个 文件或一个 脚本。它执行以下操作:

  • 确定将请求发送到哪个 服务器。
  • 将请求发送到正确的 服务器。
  • 维护与 服务器的连接(以避免必须不断打开新连接)。

服务器是一个运行在 服务器上的进程,专门用于处理来自 网关的请求。它执行以下操作:

  • 接收应用程序的 请求
  • 检查应用程序配置设置(在管理门户中设置并保存在 文件中)。
0
0 209
文章 姚 鑫 · 十月 2, 2022 2m read

第四章 Caché 服务器页面简介 - 通过 html 创建 csp 页面

创建基于 HTML 标记的 CSP 页面

要使用 HTML 文件创建 页面,请执行以下操作:

  1. 启动 Studio 并选择 File > New > > 。
  2. 将新 文件的内容替换为以下内容:
<html>
<body>
<b>Hello, World!</b>
</body>
</html>
  1. 选择文件 > 保存。
  2. 在显示的另存为窗口中,双击默认 CSP 应用程序 csp/user
  3. 输入文件名 Hello.csp 并单击另存为以保存文件。
  4. 在 窗口中,选择查看 > 网页。

与前面的示例一样,会看到 显示在浏览器中。

CSP 应用程序可以由单个 页面或一组页面组成。 CSP 应用程序作为一个单元,使用适用于整个应用程序的设置。系统提供 作为默认的 应用程序。

还可以使用文本编辑器或 编辑器创建 文件。将此文件作为 Hello.csp 保存在本地目录 中(其中 是安装 的位置)。

页面的工作方式如下:

  1. 浏览器向本地 服务器发送 请求
  2. 服务器将此请求传递给 网关(连接到 服务器), 网关又将请求传递给 服务器。
  3. 服务器查找文件 ,并将其交给 编译器。
  4. 编译器创建一个名为 的新类,该类具有写出 文件内容的 方法。 (它实际上生成一组方法,每个方法依次从
0
0 353
文章 姚 鑫 · 十月 1, 2022 2m read

第三章 Caché 服务器页面简介 - 通过 cls 创建 csp 页面

创建第一个 CSP 页面

本节介绍如何以两种不同的方式创建 Hello, World CSP 页面:

创建基于类的 CSP 页面

通过创建 的子类并覆盖其 OnPage 方法来创建 页面。通过此方法写入主设备的任何输出都会自动发送到 浏览器并显示为网页。

  1. 打开Studio
  2. 选择 File > New Project 在本地数据库 USER 命名空间中创建一个新项目。
  3. 在向导的第一页上,输入 作为包名,并输入 作为类名
  4. 在第二页上,选择 CSP 作为类类型。
  5. 单击完成。可以在 类编辑器中看到新的 CSP 类定义:
  1. OnPage 方法中,替换注释:
 ; To do...

使用 语句:

  1. 使用 Build > Compile 保存并编译新类。
  2. 选择视图 > 网页。

会在浏览器中看到 Hello, World

这个 页面也是一个 应用程序,其工作原理如下:

  1. 浏览器向指定命名空间中的本地 Web 服务器发送对 Test.Hello.cls 的请求。

  2. 服务器将此请求传递给 网关,CSP 网关将请求传递给 服务器。在我们的例子中,浏览器、 服务器和 应用程序服务器都运行在同一台机器上。在实际部署中,这些可能位于不同的机器上。

  3. 服务器查找名为 的类并调用其

0
0 188
文章 姚 鑫 · 九月 30, 2022 2m read

第二章 Caché 服务器页面简介 - 你应该知道

你应该知道什么

要高效使用 CSP,应该熟悉以下内容:

  • Caché objects and ObjectScript

  • HTML

  • JavaScript

CSP Samples

Caché 附带一组示例CSP 页面。要查看这些:

  1. 打开

  2. 要查看 示例,请确保计算机上的 Web 服务器正在运行。

  3. 启动浏览器并转到 CSP 示例菜单(使用位于以下位置的私有 Web 服务器:http://localhost:57772/csp/samples/menu.csp或位于以下位置的外部 Web` 服务器:http://localhost /csp/samples/menu.csp 。

  4. 如果安装的 具有正常或锁的安全功能,则可能会显示登录页面。如果是这样,请登录。

  5. 显示示例 页面的列表以及每个页面的简短描述。单击感兴趣的任何内容。

文档

可以在此处找到有关 的文档:

  • 使用 描述了如何创建 页面
  • 使用 ZEN 描述了如何使用 ZEN,这是一个在 之上工作的包,用于使用预构建的页面对象进行更快速的 Web 应用程序开发。 文档包括使用 组件、开发 应用程序和使用 报告。
  • ,对所有 标签的引用
  • CSP 示例菜单,显示了许多 页面示例。
  • 服务器页面快速入门教程让入门。
0
0 246
文章 姚 鑫 · 九月 29, 2022 3m read

第一章 Caché 服务器页面简介 - 什么是CSP

Caché Server Pages (CSP) 既是用于构建交互式 CSP 应用程序的架构又是工具集。 CSP 技术允许构建和部署高性能、高度可扩展的 应用程序。 允许动态生成网页,通常使用来自 数据库的数据。 “动态”意味着每次从最近更改的数据源请求同一页面时,它可能会提供不同的内容。

用途广泛。它可以

  • 显示每分钟都在变化的库存数据。
  • 支持拥有数千名活跃用户的网络社区。
  • 根据存储在 Caché 数据库中的用户信息个性化页面。
  • 根据不同用户的要求和安全权限,根据用户数据为不同用户定制页面。
  • 提供 HTMLXML、图像或其他二进制或文本数据。
  • 提供快速性能,因为它与高性能 数据库紧密耦合。

非常适合数据库应用程序。除了提供对内置 数据库的快速访问之外,它还提供了许多基于 Web 的数据库应用程序必不可少的功能,包括

  • 会话管理
  • 页面认证
  • 能够从网页中执行交互式数据库操作。

支持两种风格的 开发。

  • 为了使用类开发应用程序,CSP 提供了一个对象框架。
  • 为了使用 文件开发应用程序,CSP 提供了一种基于 的标记语言,允许在网页中包含对象和服务器端脚本。可以在一个应用程序中结合这两种技术以获得最大的灵活性。

CSP 和 Zen

是一个应用程序框架,用于快速创建包含在 和 中的数据丰富的

0
0 497
文章 姚 鑫 · 九月 28, 2022 3m read

[toc]

第四十六章 功能跟踪器收集使用统计信息

作为 不断努力改进其产品以满足客户需求的一部分, 在 IRIS® 数据平台中包含一个名为 Feature Tracker 的软件实用程序,该软件实用程序收集软件模块使用情况的统计数据。本主题介绍特征跟踪器。

为什么 InterSystems 收集统计数据

Feature Tracker 收集的统计数据记录软件模块是否存在并在给定的 实例中使用。 Feature Tracker 每周通过 将此信息发送给 。这些统计数据有助于 规划开发和支持。 收集的信息不包括任何应用程序数据。

日志在哪里

如果 成功发送数据,它会更新 \mgr 目录中的 文件。此文件包含已发送数据的 格式副本。每个条目具有以下形式:

如果 无法发送数据,它会再尝试几次。如果仍然不成功,它将停止尝试并在下一个定期安排的时间再次尝试。

IRIS 使用成功和不成功的尝试更新消息日志文件 。显示成功发送的条目具有以下形式:

显示尝试发送失败的条目具有以下形式:

mm/dd/yy-hh:mm:ss 1 %SYS.Task.FeatureTracker failed to transfer data

传输的数据包括编码的许可证密钥和主机名,以及实例 。

收集了哪些统计数据

记录是否启用了以下软件功能:

  • BitTrakCare

0
0 195