Jackson è una libreria che permette di gestire (read&write, marshall&unmarshall) messaggi di tipo JSON (www.json.org). Il messaggio di tipo JSON si adatta perfettamente ad elaborazioni client-side poiché il codice Javascript riesce ad elaborare il dato molto più velocemente rispetto ad un file XML: invece eseguire il parser del messaggio XML e quindi leggere il DOM, tramite JSON la lettura del dato è più “leggera” essendo strutturato come key-value.
Attraverso Jackson (http://jackson.codehaus.org) risulta semplice costruire e leggere messaggi JSON.
@JsonProperty :definisce il nome del campo nel messaggio, da posizionare sui metodi get()
@JsonIgnore: definisce i campi da ignorare
@JsonWriteNullProperties: definisce se scrivere o meno il campo quando nullo
@JsonValue: tratta il campo come una stringa (i.e. “a”=1 diventa “a”=”1″)
Esempio JSON:
{"number_json":1,
"model_json": { "bar_json":[{<myObject>}],
"foo_json":[{<myObject>}] }
}
Di seguito un esempio di una classe:
/**
* JSON message
*
* L' ordine dei "get" è rispettata nella scrittua del file .json
*
* @author Federico Casani - 04/dic/2009-19.42.55
*
*/
@JsonWriteNullProperties(false)
public class JsonMessage {
private Integer number;
private Model model;
@JsonProperty("model_json")
public model getModel() {
return model;
}
public void setModel(Model model) {
this. model = model;
}
@JsonProperty("number_json")
public Integer getNumber() {
return number;
}
public void setNumero(Integer number) {
this. number = number;
}
}
@JsonWriteNullProperties(false)
public static class Model{
List<MyObject> fooList;
List<MyObject> barList;
@JsonProperty("bar_json")
public List< MyObject > getBarList() {
return barList;
}
public void setBarList(List< MyObject > barList) {
this. barList = barList;
}
@JsonProperty("foo_json")
public List< MyObject > getFooList() {
return fooList;
}
public void setFooList(List< MyObject > fooList) {
this. fooList = fooList;
}
}
Un canale di comunicazione basato su messaggi JSON possiede notevoli vantaggi riguardanti
- pesantezza del dato scambiato (più snello di un dato in formato XML)
- velocità di esecuzione (il browser riesce a leggere velocemente il messaggio JSON)
Il problema più grande riguarda la sicurezza: un messaggio JSON interpretato tramite il linguaggio JavaScript è potenzialmente soggetto ad eseguire codice malevolo a causa dell’ esecuzione del metodo eval(). E’ caldamente sconsigliato utilizzare il metodo eval()!
Bisogna utilizzare il metodo parse()! Vedi http://www.json.org/js.html
Riassumendo i consigli più importanti per quanto riguarda canali di comunicazione JSON based sono:
- Non fidarsi mai del Browser
- Mantenere il messaggio pulito (non includere funzioni nel dato)
- Evitare JSON di terze parti
- Lato server devono essere authenticate tutte le richieste
- Lato server bisogna assicurarsi della corretta codifica
- Se presenti dati sensibili, utilizzare il protocollo SSL/TLS
Link utili:
http://stackoverflow.com/questions/395592/json-security-best-practices
http://www.json.org
http://www.fortifysoftware.com/servlet/downloads/public/JavaScript_Hijacking.pdf