当前位置: 首页 > 面试题库 >

除了提供瞬态关键字,我们能否拒绝序列化中的Java对象

夏侯林
2023-03-14
问题内容

我们可以避免使用transient关键字对字段进行序列化。还有其他方法吗?


问题答案:

http://java.sun.com/javase/6/docs/platform/serialization/spec/security.html

摘要:防止敏感数据序列化不应将包含敏感数据的字段序列化;这样做会将其值公开给有权访问序列化流的任何一方。有几种方法可以防止字段被序列化:

  1. 将该字段声明为私有瞬态。
  2. 定义相关类的serialPersistentFields字段,并从字段描述符列表中省略该字段。
    3.
    编写特定于类的序列化方法(即writeObject或writeExternal),该方法不将字段写入序列化流(即,不调用ObjectOutputStream.defaultWriteObject)。



这里是一些链接。

声明serialPersistenetFields。

序列化体系结构规范。

对象序列化中的安全性。



 类似资料:
  • 是否有方法序列化类的瞬态字段?文档中提到默认情况下不支持它,但是否有办法打开它? 非常感谢

  • 本文向大家介绍Java中的瞬时关键字,包括了Java中的瞬时关键字的使用技巧和注意事项,需要的朋友参考一下 实例变量被标记为瞬态,以指示JVM在序列化包含它的对象时跳过特定变量。该修饰符包含在创建变量的语句中,该语句位于变量的类或数据类型之前。 示例

  • 问题内容: 有效的Java-要保持单例保证,您必须声明所有实例字段都是瞬态的,并提供一个“ readResolve”方法。通过在此处声明瞬态场能实现什么?这是一个示例: 无论我是否将’state’变量声明为瞬态,我都会将c.getState()gettign打印为25。我在这里缺少什么吗? 问题答案: 通过使属性变为瞬态而获得的好处是,您无需序列化状态。序列化是不必要的,因为无论如何它都会被rea

  • 问题内容: 在Java中进行序列化后,是否可以将字段设置为任何非默认值?我的用例是一个缓存变量- 这就是为什么。我也有一个习惯,即不要更改字段(即,地图的内容已更改,但对象本身保持不变)。但是,这些属性似乎是矛盾的- 尽管编译器允许这样的组合,但除反序列化之后,我无法将字段设置为任何值。 我尝试了以下操作,但没有成功: 简单的字段初始化(如示例所示):这是我通常所做的,但是在未序列化之后似乎没有发

  • 考虑以下代码: 现在扩展了一个实现接口的类。类和是带有一堆getter和setter的POJOS。FindBugs抱怨和字段说: 这个Serializable类定义了一个非基元实例字段,它既不是瞬态的、Serializable的,也不java.lang.Object的,并且似乎没有实现Externalizable接口或readObject()和WriteObject()方法。 好吧,所以一切都很好

  • 问题内容: 使用JSON定义的样子,为了将其反序列化为对象,我需要在我的类上创建一个名为“ event”的属性,这是一个C#关键字。还有另一种方法可以告诉它字段名称是什么? 这是JSON的示例: {event:123 data:{“ data”:“ 0D0401”,“ ttl”:“ 60”,“ published_at”:“ 2014-04-16T18:04:42.446Z”,“ id”:“ 48