反序列化机制激活成功教程单例模式(枚举除外):
public class BreakSingleton{
public static void main(String[] args) throws Exception{
//先根据单例模式创建对象(单例模式所以s1,s2是一样的) Singleton s1=Singleton.getInstance(); Singleton s2=Singleton.getInstance();
//将s1写入本地某个路径
FileOutputStream fos=new FileOutputStream("本地某个路径下文件"); ObjectOutputStream oos=new ObjectOutputStream(fos); oos.writeObject(s1); oos.close(); fos.close();
//从本地某个路径读取写入的对象
ObjectInputStream ois=new ObjectInputStream(new FileInputStream("和上面的本地参数路径相同")); Singleton s3=(Singleton) ois.readObject(); System.out.println(s1); System.out.println(s2); System.out.println(s3);//s3是一个新对象
}
}
如何避免实现序列化单例模式的漏洞:
class Singleton implements Serializable{
private static final Singleton singleton = new Singleton();
private Singleton() { } public static Singleton getInstance(){
return singleton;
} //反序列化定义该方法,则不需要创建新对象 private Object readResolve() throws ObjectStreamException{
return singleton;
} }
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/h6javajc/9676.html