为什么播放框架模板可以访问私有字段?

时间:2011-12-15 19:44:36

标签: java templates playframework private access-modifiers

我有一个带有private字段的类,并且怀疑模板在没有getX方法的情况下无法访问它,但该值显示为public。< / p>

class Task {
  private String title = "";
}

模板可以使用以下代码显示title

${task.title}

我猜这是由于反射魔法,但是如果没有吸气剂,渲染私有字段是不是不可能?

2 个答案:

答案 0 :(得分:2)

我的猜测是框架是动态添加getter和setter方法。尝试制作一个返回“覆盖”的String getTitle()方法,你肯定会知道。

答案 1 :(得分:1)

该框架确实仅为公共字段生成 setter和getter ,但由于模板语言为Groovy且 Groovy似乎没有封装,因此不可访问的字段可以在不受模板代码限制的情况下访问。

我报告了一个错误,但我真的不确定是否可以修复,因为Play 1.x在Groovy上传输其模板(对于即将推出的2.0版本,播放将切换为Scala作为模板的语言)

如果您确实需要限制访问权限,则应查看SecurityManagers 。它们可以防止对私有字段的反射,但我不知道您可以精确配置限制。