我正在通过 SonarQube 版本 5.1 分析 Java SE 7 项目。
然后,我面临squid:S1948
在下面的代码上。
“可序列化”类中的字段应该是瞬态的或可序列化的
可序列化类中的字段本身必须是可序列化的或瞬态的,即使该类从未显式序列化或反序列化。这是因为在负载下,大多数 J2EE 应用程序框架都会将对象刷新到磁盘,而具有非瞬态、不可序列化数据成员的所谓可序列化对象可能会导致程序崩溃,并为攻击者打开大门。
enum ShutterSpeed {
private final Rational value; // Make "value" transient or serializable.
...
}
我认为任何枚举字段都不会在 J2SE 5.0 中被序列化(枚举常量的序列化)
这是假阳性吗?
整个代码和问题是here.
这实际上是一个误报。这枚举常量的序列化(您提供了链接)说:
枚举常量的序列化与普通可序列化不同
或可外部化的对象。枚举常量的序列化形式
仅由其名称组成;常量的字段值不是
以形式呈现。
据我看来,标记没有意义Enum
的字段值为transient
或让他们实施Serializable
,因为它们永远不会被序列化,无论它们是否被标记为transient
或实施Serializable
.
如果该分析工具强迫您做这两件事之一,那么您将编写无用的代码。如果我是你,我会尝试禁用该警告enum
s.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)