And*_*res 19 java security final
虽然在Java中使用'final'关键字的原因有很多,但我一遍又一遍地听到的一个原因是它使您的代码更安全.虽然这在这个微不足道的案例中似乎有意义:
public class Password
{
public final String passwordHash;
...
}
Run Code Online (Sandbox Code Playgroud)
使用final关键字,您可以预期没有恶意代码可以更改变量passwordHash.但是,使用反射可以更改passwordHash字段的最终修饰符.
"最终"提供任何真正的安全性,还是只是安慰剂?
编辑: 有一些非常有趣的讨论,我希望我能接受不止一个答案.谢谢各位的意见.
And*_*are 10
Java的final
关键字不用于此类安全性.它不能代替通常需要加密解决方案的东西.
在这类讨论中,"安全"通常意味着安全对象模型的概念 - 也就是说,对象模型不能被消费者操纵,以达到该类原作者无意的目的.
我不确定我会依赖语言结构来增强系统的安全性.
我不认为制作一个字段最终会增加安全性来抵御恶意攻击(更有可能防止错误,当然还有线程问题).安全性的唯一"真实形式"是,如果您有一个最终的常量字段,它可能会在编译时被内联,因此在运行时更改其值将没有任何影响.
我在继承的背景下听说过最终和安全性.通过使一个类最终,你可以阻止某人继承它并触摸或覆盖其受保护的成员,但我再次使用它来避免错误而不是防止威胁.