MVEL:如何将java.lang。*类保留在表达式之外?

时间:2013-04-17 20:11:18

标签: mvel

我正在尝试沙盒MVEL表达式评估。不幸的是,默认情况下,MVEL包含表达式语言中的所有java.lang。*类,因此用户可以调用“Runtime.exit()”并终止整个系统。

如何排除我没有使用addImport()显式添加的所有类?

我无法做出VariableResolvers的正面或反面。

3 个答案:

答案 0 :(得分:3)

据我所知,这不受支持。

前段时间我在公司的一个项目上面临这种需求。我们必须更改MVEL以介绍一种配置自定义策略以控制对类型和方法的访问的方法。 问题是您还可以通过其完全限定名称访问任何类,因此不仅仅是删除默认导入的问题。 不幸的是,我没有代码使其可用。

答案 1 :(得分:1)

var chai = require('chai');
var sinonChai = require("sinon-chai");
var expect = chai.expect;
var extend = require('lodash').extend;
var sinon = require('sinon');
chai.use(sinonChai);
var proxyquire = require('proxyquire');

describe("getProtocol", function () {
    var testedModule, parseSpy, path;


    before(function () {

        path = "http://www.some.com/test";

        parseSpy = sinon.spy();

        testedModule = proxyquire('../getProtocol.js', {
            'url': {
                'parse': parseSpy
            }
        });

        testedModule.getProtocol(path);
    });

    it("calls url.parse", function () {
        expect(parseSpy).has.been.calledOnce.and.calledWithExactly(path, true);
    });
});

答案 2 :(得分:0)

您是否尝试使用AspectJ来限制来自MVEL的这些调用?