界: API Abuse
API 是调用方和被调用方之间的约定。最常见的 API 滥用是由于调用方未能遵守此约定的终止导致的。例如,如果某个程序在调用 chroot() 后未能调用 chdir(),则违反了用于指定如何安全地更改活动根目录的约定。库滥用的另一个典型示例是期望被调用方向调用方返回可信的 DNS 信息。在这种情况下,调用方通过对被调用方行为做出某种假设(返回值可用于身份验证目的)滥用其 API。另一方也可能违反调用方-被调用方约定。例如,如果编码器子类化 SecureRandom 并返回一个非随机值,则将违反此约定。
Object Model Violation: Just one of restoreState() and saveState() Defined
Abstract
这个类仅替代了
saveState()
和 restoreState()
中的一个。Explanation
任何继承 StateHolder 接口的类都必须同时实施
示例 1:以下类定义了
它始终会出错。
saveState(javax.faces.context.FacesContext)
和 restoreState(javax.faces.context.FacesContext, java.lang.Object)
,或者同时都不实施。由于这两种方法关系密切,因此,saveState(javax.faces.context.FacesContext)
和 restoreState(javax.faces.context.FacesContext, java.lang.Object)
方法不得驻留在继承层次结构的不同级别中。示例 1:以下类定义了
saveState()
,但未定义 restoreState()
,因此,无论扩展到何种类,它始终会出错。
public class KibitzState implements StateHolder {
public Object saveState(FacesContext fc) {
...
}
}
References
[1] Sun Microsystems JavaDoc for StateHolder Interface
[2] Standards Mapping - Common Weakness Enumeration CWE ID 398
desc.structural.java.object_model_violation_just_one_of_restoreState_saveState_defined