我有一个带有private
字段的类,并且怀疑模板在没有getX
方法的情况下无法访问它,但该值显示为public
。< / p>
class Task {
private String title = "";
}
模板可以使用以下代码显示title
:
${task.title}
我猜这是由于反射魔法,但是如果没有吸气剂,渲染私有字段是不是不可能?
答案 0 :(得分:2)
我的猜测是框架是动态添加getter和setter方法。尝试制作一个返回“覆盖”的String getTitle()方法,你肯定会知道。
答案 1 :(得分:1)
该框架确实仅为公共字段生成 setter和getter ,但由于模板语言为Groovy且 Groovy似乎没有封装,因此不可访问的字段可以在不受模板代码限制的情况下访问。
我报告了一个错误,但我真的不确定是否可以修复,因为Play 1.x在Groovy上传输其模板(对于即将推出的2.0版本,播放将切换为Scala作为模板的语言)
如果您确实需要限制访问权限,则应查看SecurityManagers 。它们可以防止对私有字段的反射,但我不知道您可以精确配置限制。