我目前正在考虑制作足球博彩游戏,用户必须通过提交算法来预测结果。
提交算法意味着实现一个接口(如下所示,我必须详细考虑):
public interface Bet
{
public Result makePrediction(Matchday m, History h, ...);
}
但是如果用户有可能自己实现一个接口,他们几乎可以做所有事情,这是一个安全问题。 现在我已经看到了Java 8引入的新功能特性。 目前,我考虑让用户提供一个lambda函数,从上面“实现”接口,但缩小了可能性。
可能的用户输入是:
(Matchday m, History h, ...)
// apply algorithm
-> {return f(m,h,...);}
我将解析它并将其添加到我的程序中。我现在的问题是:
答案 0 :(得分:4)
限制用户对lambdas的输入无法解决问题。 lambda主体仍然可以包含您想要的任何Java代码。您甚至可以在lambda体内定义新类。从了解Java SecurityManager
到在沙盒虚拟机(如KVM)中运行用户代码,有多种方法可以解决您的问题。