有没有办法可以配置我的JPA属性(我使用hibernate作为实现)实体,这样在调试时没有人能看到它的值?
该属性是暂时的,出于安全原因,我不希望任何人在调试时看到它。我的申请的jar / war将由第三方使用。
答案 0 :(得分:2)
假设您在Oracle JVM上运行程序,并允许人们通过调试器连接到该JVM - 不,您不能隐藏某些字段。
调试器将用于与Java进程通信的接口是JDI 1 ,它提供了JVM对您的代码的几乎所有信息。具体做法是:
ReferenceType::allFields
列出所有字段,包括类中的瞬态字段:
包括所有声明和继承的字段,无论它们是隐藏还是多重继承。
ObjectReference::getValue(Field)
来获取字段的值。请注意,文档没有说明有关IllegalAccessException的任何内容,或类似的内容。即使你可以锁定某些领域,它也不会对你有好处;调试器能够在局部变量中查看值(当您读取字段时,或者当您要写入字段时)。你真正想要的是锁定某些值,而不是字段。而且这也不在JDI中。
1 实际上JDWP实际上是,但是JDI建立在这之上,在这里更容易讨论。