aviator 属实搞事情

简介: aviator 属实搞事情

简单说下配置的内容吧, 这个表达式格式真的折磨人

import com.alibaba.fastjson.JSON;
import com.googlecode.aviator.AviatorEvaluator;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.text.StringSubstitutor;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public String strJoin(String split){
        StringUtils.join(split, "'=='");
        System.out.println("split >>> "+split);
        return split;
    }
    public String strReplace(String strvalue){
        strvalue = strvalue.replace(" ","");
        if(!strvalue.contains("(")){
            strvalue = "'"+strvalue.replace("==","'=='")+"'";
            strvalue = strvalue.replace("||","'||'");
            strvalue = strvalue.replace("&&","'&&'");
        }else{
            strvalue = strvalue.replace("(","('");
            strvalue = strvalue.replace("==","'=='");
            strvalue = strvalue.replace(")","')");
            strvalue = strvalue.replace("||","'||'");
            strvalue = strvalue.replace("&&","'&&'");
        }
        return strvalue;
    }
    public String strChange(String groups) {
        StringBuffer groupsSplit = new StringBuffer();
        String result = "";
        // String groups = "dfffdsfd == 学习";
        String[] split = groups.split("==");
        for (int i = 0; i < split.length; i++) {
            if (!"".equals(split[i]) && split[i] != null) {
                groupsSplit.append("'" + split[i] + "'==");
            }
        }
        result = groupsSplit.toString();
        String tp = result.substring(result.length() - 2, result.length());
        if ("==".equals(tp)) {
            result = result.substring(0, result.length() - 2);
        }
        result = result.replace(" ", "");
        return result;
    }
 private boolean checkIfLogic(String expr, Map<String, String> valuesMap) {
        try {
            Map<String, Object> jsonMap = (Map<String, Object>) JSON.parse(expr);
            List<String> expression = null;
            if (null != jsonMap && jsonMap.size() > 0) {
                expression = (List<String>) jsonMap.get("expression");
            }
            expr = org.apache.commons.lang3.StringUtils.join(expression.toArray(), " ");
            StringSubstitutor sub = new StringSubstitutor(valuesMap);
            String resolvedString = sub.replace(expr);
            if (com.cmit.testing.utils.StringUtils.isNotEmpty(resolvedString)) {
                System.out.println(" 替换前的表达式 ==="+resolvedString);
                if (resolvedString.indexOf("'") == -1 && resolvedString.contains("==")) {
                    resolvedString = strReplace(resolvedString);
                    System.out.println(" 替换后的表单时==="+resolvedString);
                    // resolvedString = strChange(resolvedString);
                    // resolvedString = strJoin(resolvedString);
                }
                System.out.println(" 执行的表达式 >>>> resolvedString >>>  " + resolvedString);
                try {
                    Boolean b = (Boolean) AviatorEvaluator.execute(resolvedString);
                    System.out.println("b >>>" + b);
                    return b;
                } catch (Exception e) {
                    System.out.println("AviatorEvaluator 解析表达式异常 >>> " + e.getMessage());
                }
            }
        } catch (Exception e) {
            System.out.println("StringSubstitutor 解析表达式异常 >>> " + e.getMessage());
        }
        return false;
    }

测试

public static void main(String[] args) {
        Test_C c = new Test_C();
        Boolean bs = (boolean) AviatorEvaluator.execute("'1356969696a' == '1356969696' || '1356969696a' == '1356969696a' || ''==\"''\"");
        Boolean bastt = (boolean) AviatorEvaluator.execute("'1356969696a' == '1356969696' || '1356969696a' == '1356969696a' || ''==''");
        System.out.println("bastt >>>" + bastt);
        boolean bst = (boolean) AviatorEvaluator.execute("'1356969696' == '1356969696' || '1356969696' == '1356969696a' || 1356969696==\"''\"");
        System.out.println(bs + "," + bst);
        // String expr1 = "{\"expression\":[\"'${account}'\",\"==\",\"''\"]}";
        String expr1 = "{\"expression\":[\"(${account}\",\"==\",\"yhs123456789101112%)\",\"||\",\"${account}\",\"==\",\"yhs1234567891011121314151617181\"]}";
        String expr2 = "{\"expression\":[\"${account}\",\"==\",\"yhs123456789101112%\",\"||\",\"(${account}\",\"==\",\"234242425)\",\"||\",\"${account}\",\"==\",\"uttueuedd22811122333\",\"&&\",\"(${account}\",\"==\",\"uttueuedd22811122333)\"]}";
        String expr3 = "{\"expression\":[\"${account}\",\"==\",\"yhs123456789101112%\",\"||\",\"${account}\",\"==\",\"234242425\",\"||\",\"${account}\",\"==\",\"uttueuedd22811122333\",\"&&\",\"${account}\",\"==\",\"uttueuedd22811122333\",\"&&\",\"${account}\",\"==\",\"eteeessss3222\"]}";
        String expr4 = "{\"expression\":[\"${account}\",\"==\",\"yhs123456789101112%\"]}";
        // String expr1 = "{\"expression\":[\"('${account}'\",\"==\",\"'yhs123456789101112%')\",\"||\",\"'${account}'\",\"==\",\"'yhs1234567891011121314151617181'\"]}";
        System.out.println(expr1);
        Map<String, String> valuesMap1 = new HashMap<>();
        valuesMap1.put("account", "234242425");
        boolean f = c.checkIfLogic(expr1, valuesMap1);
        System.out.println("f >>>" + f);
        }

测试结果


至此结束, 替换的结果真不是很好, 这个处理造成很大的问题。有左右括号时,就替换有问题。还在想着怎么弄,感觉还是挺这折腾的。


目录
相关文章
|
8月前
|
SQL 缓存 Java
终于来新同事了,没想到竟是我噩梦的开始
终于来新同事了,没想到竟是我噩梦的开始
45 0
|
机器学习/深度学习 人工智能 自然语言处理
【paddlehubOCR项目】网课手酸酸,眼花花,救星来啦!
大家好这里是三岁,今天给大家带来的是在AiStudio项目平台的一个精选项目,虽然很短,但是效果拔群,使用到了最近特别火的paddleOCR~~~
234 0
【paddlehubOCR项目】网课手酸酸,眼花花,救星来啦!
|
设计模式 算法 程序员
程序人生 - 给IT新人的15点建议:苦逼程序员的辛酸反省与总结
程序人生 - 给IT新人的15点建议:苦逼程序员的辛酸反省与总结
118 0
|
域名解析 缓存 负载均衡
我是小R,昨晚我好像把B站搞崩了!!!
我是小R,昨晚我好像把B站搞崩了!!!
我是小R,昨晚我好像把B站搞崩了!!!
|
算法 前端开发 搜索推荐
学编程的 3 个正经建议,学弟学妹们记得收藏呀,这波赚大发了!
学编程的 3 个正经建议,学弟学妹们记得收藏呀,这波赚大发了!
123 0
瞧!这5000个爱管闲事的工程师干的好事.....
从 2018 年 4 月来到大爱清尘基金开始,师先存就没有正经过过几个周末。
10122 0
|
程序员
程序员离职带走源码竟获利800万,网友:我一般都是删库跑路
程序员辞职带走自己写的源码算违法吗? 程序员属于特殊职业,正常来说,公司会与程序员签订保密或所有权协议的。如果没有签订,按照法理来推论,在工作期间所有制作或参与的代码都属于公司财产,属于工作内容范围内的职责,未经公司许可带走或拷贝是违法的,这种行为可有公司自诉也可由司法部分公诉,具体要看给公司造成的损害程度。
1559 0
|
Java 程序员 Spring
Java开发程序员遇危机,才31竟遭公司嫌弃,网友:还拿着6k等死?
程序员会有中年危机,一个很大的因素来自:我们曾经引以为傲、赖以生存的开发技术会被淘汰。而学习新开发技术成本太高。看着快速崛起的年轻人,不免使人心生:廉颇老矣的感慨。
1159 0
十问拼多多之九:批评并非为了“搞死”谁
摘要:媒体提出的质疑,如果运用得当,原本是企业校正的最好机会,原本是企业重塑自身形象的最好机会。
511 0
|
前端开发 Java 程序员
【程序媛晒83行代码】认真工作的程序媛原来是这样,你想到了嘛?
据说认真工作的程序员魅力值加10,这段代码你能猜的出来嘛。
3118 0