配置命名的高级策略表达式

无需在多个策略中多次重新键入同一表达式,您可以配置一个命名表达式并在任何时候在策略中使用该表达式时引用该名称。例如,您可以创建以下命名表达式:

  • 这个表达方式:

    http.req.body(100).contains("this")

  • 表达方式:

    http.req.body(100).contains("that")

然后,您可以在策略表达式中使用这些命名表达式。例如,下面是基于上述示例的法律表达方式:

这个表达方式   这种表达方式

您可以使用高级策略表达式的名称作为函数的前缀。命名表达式可以是简单表达式或复合表达式。函数必须是一个可以对指定表达式返回的数据类型进行操作的函数。

示例 1:作为前缀的简单命名表达式

以下简单的命名表达式(用于标识文本字符串)可用作 <string> 与文本数据一起使用的 ACHER_STR (”“) 函数的前缀:

HTTP.REQ.BODY(1000)

如果表达式的名称是顶级 1KB,则可以使用顶级 1kb。之后的 STR(“用户名”)而不是 HTTP.REQ.身体(1000)。

示例 2:复合命名表达式作为前缀

您可以创建名为 basic_header_value 的复合表达式来连接请求中的用户名、冒号 (:) 和用户密码,如下所示:

add policy expression basic_header_value "HTTP.REQ.USER.NAME + \":\" + HTTP.REQ.USER.PASSWD"

然后,您可以在重写操作中使用表达式的名称,如以下示例所示:

add rewrite action insert_b64encoded_authorization insert_http_header authorization '"Basic " + basic_header_value.b64encode' -bypassSafetyCheck YES

在该示例中,在用于构造自定义标头值的表达式中,B64 编码算法应用于复合命名表达式返回的字符串。

您还可以使用命名表达式(本身或作为函数的前缀)为重写中的替换目标创建文本表达式。

使用 CLI 配置命名的默认语法表达式

在命令提示符处,键入以下命令以配置命名表达式并验证配置:

-  add policy expression <name><value>

-  show policy expression <name>

示例:

> add policy expression myExp "http.req.body(100).contains("the other")"
Done

> show policy expression myExp
    1)      Name: myExp  Expr: "http.req.body(100).contains("the other")"  Hits: 0 Type : ADVANCED
Done

表达式最多可以是 1,499 个字符。

使用 GUI 配置命名表达式

  1. 在导航窗格中,展开 AppExpert,然后单击表达式
  2. 单击高级表达式
  3. 单击添加
  4. 输入表达式的名称和描述。
  5. 使用配置高级策略表达式中描述的过程配置表达式。状态栏中的消息将指示已成功配置策略表达式。