Podemos evitar la serialización de campos utilizando la palabra clave transient
. ¿Hay alguna otra forma de hacerlo?Podemos negar un objeto java de la serialización que no sea la palabra clave transitoria
Respuesta
http://java.sun.com/javase/6/docs/platform/serialization/spec/security.html
RESUMEN: Prevención de la serialización de campos de datos sensibles que contienen datos sensibles no debe ser serializado; al hacerlo, expone sus valores a cualquier parte con acceso a la secuencia de serialización . Hay varios métodos para prevenir un campo de ser serializado:
- declarar el campo como transitorio privado.
- Defina el campo serialPersistentFields de la clase en cuestión, y omita el campo de la lista de descriptores de campo .
- escribir un método de serialización específico de clase (es decir, writeObject o writeExternal), que no escribe el campo a la corriente de serialización (es decir, al no presentarse ObjectOutputStream.defaultWriteObject).
Aquí hay algunos enlaces.
Declaring serialPersistenetFields.
¿puede explicar el segundo método en detalle ... –
declarar serialPersistenetFields - Esto se hace usando una variable final estática especial llamada serialPersistentFields. – adatapost
Si por alguna razón transitoria no se adapta, puede hacer la serialización directamente anulando los métodos writeObject and readObject. Luego puede incluir u omitir cualquier campo que necesite.
Esto es lo que significa transitorios como una palabra clave. Todo su propósito es detener la serialización de los datos por cualquier razón.
Si desea un control de grano más fino sobre el proceso puede usar los métodos writeObject/readObject que ObjectOutputStream/ObjectInputStream usa como parte del proceso de serialización, y puede combinar eso con algunas anotaciones personalizadas o cualquier lógica que desee.
private void readObject(java.io.ObjectInputStream stream)
throws IOException, ClassNotFoundException;
private void writeObject(java.io.ObjectOutputStream stream)
throws IOException
puede crear su propio protocolo con la interfaz Externalizable, que en mi opinión es mejor que un Serializable, ya que no contiene métodos privados enganchados por la JVM (writeObject
y readObject
). En lugar de implementar la interfaz Serializable
, puede implementar Externalizable
, que contiene dos métodos:
public void writeExternal(ObjectOutput out) throws IOException;
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
A diferencia del uso Serializable
nada se proporciona de forma gratuita ahora, sin embargo. Es decir, el protocolo está completamente en sus manos, sobrepasando campos transitorios/no trianuales, etc.
- 1. ¿Hay alguna palabra clave en Java que sea similar a la palabra clave 'AS' de C#
- 2. ¿podemos tener una clave externa que no sea la clave principal en ninguna otra tabla?
- 3. ¿Podemos hacer que un objeto sea clave en el mapa cuando usamos JSON?
- 4. Java objeto serialización y la herencia
- 5. objeto hace referencia a una instancia transitoria no guardado: guardar la instancia transitoria antes de enjuagar
- 6. Java: cuándo utilizar la palabra clave 'this'
- 7. ¿Cuándo NO utilizar la palabra clave estática en Java?
- 8. Java - utilizando la palabra clave 'super'
- 9. Backbone-relational: la clave de asociación no funcionará a menos que sea la misma que la clave externa
- 10. Por qué no podemos utilizar 'esto' palabra clave en un método estático
- 11. deserializar un miembro transitoria de un objeto a un valor predeterminado no nulo en Java
- 12. ¿Cómo puedo usar correctamente la palabra clave volátil en Java?
- 13. SortedList indexado por otra cosa que no sea la clave
- 14. Eliminar líneas que contienen la palabra clave de un archivo
- 15. ¿Cómo se implementa la palabra clave "this" de java?
- 16. Utilizando la palabra clave 'this' en los constructores de Java
- 17. F # equivalente de la C# 'objeto' palabra clave
- 18. ¿Cuándo utiliza exactamente la palabra clave volátil en Java?
- 19. ¿La serialización preserva la identidad del objeto?
- 20. ¿Cómo negar palabra específica en expresiones regulares?
- 21. ¿Cómo hacer que un campo mapeado sea heredado de una superclase transitoria en JPA?
- 22. ¿Cuál es la mejor alternativa para la serialización de Java?
- 23. Obtener el iterador de la lista de Java para devolver algo que no sea el Objeto
- 24. palabra clave foreach en java?
- 25. Aprendizaje de Java, uso de la palabra clave sincronizada
- 26. ¿La palabra clave let de linq es mejor que su palabra clave?
- 27. Equivalente de la palabra clave '#' de C# en Java
- 28. Gson Java palabra clave reservada
- 29. 5 formas de utilizar la palabra clave estática en Java
- 30. C# equivalente de la palabra clave Java 'implements'?
tengo esta pregunta ... preguntando si podemos hacerlo a través de un nativo ... –
¿Para qué propósito? ¿Por qué la transitoria no es una buena solución para sus casos de uso? – GaryF
@ Bombe/@ GaryF: la curiosidad siempre es una razón válida. –