클래스가 Serializable 인터페이스를 지원하며 readObject() 및 writeObject() 메서드가 항상 예외를 던지도록 정의되어 있지 않은 경우 직렬화될 수 있습니다. 직렬화 가능한 클래스는 안전한 사용을 위해 목적으로 한 코드 내에서 위험할 수 있습니다.
예:
class DeserializableClass implements Serializable { // 클래스가 예외를 던지는 'writeObject()' 메서드를 포함하지 않습니다
private int sensitive = 736326;
private void readObject(ObjectInputStream in) {
throw new Error();
}
}
빠른 수정을 적용한 후:
class DeserializableClass implements Serializable {
private int sensitive = 736326;
private void readObject(ObjectInputStream in) {
throw new Error();
}
private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
throw new java.io.NotSerializableException("DeserializableClass");
}
}
다음 옵션을 사용해 검사를 구성하세요.
Serializable을 상속받지만 직렬화를 의도하지 않은 클래스를 의미합니다.
그러한 클래스를 무시하는 대신 항상 예외를 던지는 readObject() 및 writeObject() 메서드를 추가하는 것이 더 안전할 수 있습니다.