Class StandardContext

java.lang.Object
cloud.opencode.base.expression.context.StandardContext
All Implemented Interfaces:
EvaluationContext

public class StandardContext extends Object implements EvaluationContext
Standard Evaluation Context 标准求值上下文

The default implementation of EvaluationContext with full feature support.

具有完整功能支持的EvaluationContext默认实现。

Features | 主要功能:

  • Variable management with ConcurrentHashMap - 使用ConcurrentHashMap的变量管理
  • Built-in Map and Bean property accessors - 内置Map和Bean属性访问器
  • Parent context chaining for scoped evaluation - 父上下文链接用于作用域求值
  • Configurable sandbox, type converter, and function registry - 可配置沙箱、类型转换器和函数注册表
  • Builder pattern for construction - 构建器模式用于构造

Usage Examples | 使用示例:

StandardContext ctx = StandardContext.builder()
    .rootObject(myBean)
    .sandbox(DefaultSandbox.standard())
    .build();
ctx.setVariable("discount", 0.1);
Object result = OpenExpression.eval("price * (1 - discount)", ctx);

Security | 安全性:

  • Thread-safe: Yes, ConcurrentHashMap for variables - 线程安全: 是,变量使用ConcurrentHashMap
  • Null-safe: Yes, null name/variable handled gracefully - 空值安全: 是,null名称/变量优雅处理
Since:
JDK 25, opencode-base-expression V1.0.0
Author:
Leon Soo www.LeonSoo.com
See Also:
  • Constructor Details

    • StandardContext

      public StandardContext()
      Create standard context with default settings. 使用默认设置创建标准上下文。

      V1.0.4 sec round-4 P0: this constructor now installs DefaultSandbox.standard() as the default sandbox. Pre-fix the default was null, which combined with a null-tolerant MethodCallNode.validateMethodAccess let attacker-controlled expressions like ctx.getClass().forName('java.lang.Runtime').getMethod('exec', String.class) .invoke(null, 'id') reach Runtime.exec — RCE. The DefaultSandbox.standard() preset blocks the Runtime/ProcessBuilder/System/Thread/ ClassLoader classes plus reflection methods, closing that chain. Callers that need a different policy can use the 6-arg constructor or DefaultSandbox.restrictive(); callers that genuinely need NO sandbox (test code only!) can pass null explicitly. V1.0.4 sec round-4 P0:本构造器现在装入 DefaultSandbox.standard() 作默认 sandbox。 修复前默认为 null,配合容忍 null 的 MethodCallNode.validateMethodAccess 让攻击者表达式如 ctx.getClass().forName('java.lang.Runtime').getMethod('exec', String.class) .invoke(null, 'id') 可达 Runtime.exec —— RCE。 DefaultSandbox.standard() 阻断 Runtime/ProcessBuilder/System/Thread/ClassLoader 类与反射方法,关闭此链。需要其他策略请用 6 参构造器或 DefaultSandbox.restrictive(); 确实需要无 sandbox 的(仅测试代码!)可显式传 null

    • StandardContext

      public StandardContext(Object rootObject)
      Create standard context with root object. Same default sandbox as StandardContext(). 使用根对象创建标准上下文。默认 sandbox 与 StandardContext() 一致。
      Parameters:
      rootObject - the root object | 根对象
    • StandardContext

      public StandardContext(Object rootObject, FunctionRegistry functionRegistry, List<PropertyAccessor> propertyAccessors, TypeConverter typeConverter, Sandbox sandbox, EvaluationContext parent)
      Create standard context with full customization 使用完整自定义创建标准上下文
      Parameters:
      rootObject - the root object | 根对象
      functionRegistry - the function registry | 函数注册表
      propertyAccessors - the property accessors | 属性访问器
      typeConverter - the type converter | 类型转换器
      sandbox - the security sandbox | 安全沙箱
      parent - the parent context | 父上下文
  • Method Details

    • getRootObject

      public Object getRootObject()
      Description copied from interface: EvaluationContext
      Get the root object 获取根对象
      Specified by:
      getRootObject in interface EvaluationContext
      Returns:
      the root object | 根对象
    • setRootObject

      public void setRootObject(Object root)
      Description copied from interface: EvaluationContext
      Set the root object 设置根对象
      Specified by:
      setRootObject in interface EvaluationContext
      Parameters:
      root - the root object | 根对象
    • getVariable

      public Object getVariable(String name)
      Description copied from interface: EvaluationContext
      Get variable value 获取变量值
      Specified by:
      getVariable in interface EvaluationContext
      Parameters:
      name - the variable name | 变量名
      Returns:
      the variable value | 变量值
    • setVariable

      public void setVariable(String name, Object value)
      Description copied from interface: EvaluationContext
      Set variable value 设置变量值
      Specified by:
      setVariable in interface EvaluationContext
      Parameters:
      name - the variable name | 变量名
      value - the variable value | 变量值
    • hasVariable

      public boolean hasVariable(String name)
      Description copied from interface: EvaluationContext
      Check if variable exists 检查变量是否存在
      Specified by:
      hasVariable in interface EvaluationContext
      Parameters:
      name - the variable name | 变量名
      Returns:
      true if exists | 如果存在返回true
    • getVariables

      public Map<String,Object> getVariables()
      Description copied from interface: EvaluationContext
      Get all variables 获取所有变量
      Specified by:
      getVariables in interface EvaluationContext
      Returns:
      the variable map | 变量映射
    • getFunctionRegistry

      public FunctionRegistry getFunctionRegistry()
      Description copied from interface: EvaluationContext
      Get function registry 获取函数注册表
      Specified by:
      getFunctionRegistry in interface EvaluationContext
      Returns:
      the function registry | 函数注册表
    • getPropertyAccessors

      public List<PropertyAccessor> getPropertyAccessors()
      Description copied from interface: EvaluationContext
      Get property accessors 获取属性访问器
      Specified by:
      getPropertyAccessors in interface EvaluationContext
      Returns:
      the property accessor list | 属性访问器列表
    • getTypeConverter

      public TypeConverter getTypeConverter()
      Description copied from interface: EvaluationContext
      Get type converter 获取类型转换器
      Specified by:
      getTypeConverter in interface EvaluationContext
      Returns:
      the type converter | 类型转换器
    • getSandbox

      public Sandbox getSandbox()
      Description copied from interface: EvaluationContext
      Get security sandbox 获取安全沙箱
      Specified by:
      getSandbox in interface EvaluationContext
      Returns:
      the sandbox, or null if not configured | 沙箱,如果未配置则返回null
    • createChild

      public EvaluationContext createChild()
      Description copied from interface: EvaluationContext
      Create child context 创建子上下文

      Creates a child context that inherits from this context but can have its own variable bindings. Used for collection operations.

      创建继承自此上下文但可以有自己变量绑定的子上下文。用于集合操作。

      Specified by:
      createChild in interface EvaluationContext
      Returns:
      the child context | 子上下文
    • addPropertyAccessor

      public StandardContext addPropertyAccessor(PropertyAccessor accessor)
      Add a property accessor 添加属性访问器
      Parameters:
      accessor - the accessor | 访问器
      Returns:
      this context for chaining | 用于链式调用的上下文
    • builder

      public static StandardContext.Builder builder()
      Create a builder for StandardContext 创建StandardContext的构建器
      Returns:
      the builder | 构建器