Ho un POJO in Google Web Toolkit come questo che posso recuperare dal server.Sicurezza durante l'utilizzo di GWT RPC
class Person implements Serializable {
String name;
Date creationDate;
}
Quando il client apporta modifiche, ho salvarlo al server utilizzando il GWT RemoteServiceServlet in questo modo:
rpcService.saveObject(myPerson,...)
Il problema è che l'utente non dovrebbe essere in grado di cambiare il creationDate
. Poiché il metodo RPC è in realtà solo un POST HTTP per il server, è possibile modificare lo creationDate
modificando la richiesta POST.
Una soluzione semplice sarebbe quella di creare una serie di funzioni RPC come changeName(String newName)
, ecc., Ma con una classe con molti campi richiederebbero molti metodi per ogni campo e sarebbe inefficiente cambiare molti campi contemporaneamente.
Mi piace la semplicità di avere un singolo POJO che posso usare sia sul server che sul client GWT, ma ho bisogno di un modo per farlo in modo sicuro. Qualche idea?
EDIT
sto inviare nuovamente con una taglia per provare e vedere se ci sono altre idee. Forse la mia domanda iniziale si concentrava troppo sulle specifiche del GWT. In realtà penso che questa sia una domanda generica per qualsiasi sistema che usi JavaBeans per passare dati tra un ambiente sicuro (servlet container) e un ambiente insicuro (browser web).
EDIT 2
Inoltre, per essere chiari, ho usato il campo creationDate
come esempio del problema. In realtà il codice con cui sto lavorando è più complicato con molti campi diversi.
Informazioni su EDIT 2: Non penso che ci sia molta differenza tra il campo creationDate e altri campi - eccetto che il creationDate potrebbe avere alcune complessità aggiuntive tipiche della gestione di data/ora. Le autorizzazioni sono il solito modo di gestire tutti i dati in arrivo e in uscita - per alcuni oggetti/campi, questo è molto facile negando sempre tutti gli aggiornamenti. Per altri oggetti/campi, le autorizzazioni possono essere molto elaborate, basate su verifiche su strutture di dati complesse, valutate individualmente per ciascun utente. In ogni caso, i controlli vengono eseguiti sul server: non eseguirli sul client. –