Tengo un POJO en Google Web Toolkit como este que puedo recuperar del servidor.Seguridad al usar GWT RPC
class Person implements Serializable {
String name;
Date creationDate;
}
Cuando el cliente realiza cambios, volver a guardarlo en el servidor mediante el GWT RemoteServiceServlet así:
rpcService.saveObject(myPerson,...)
El problema es que el usuario no debe ser capaz de cambiar la creationDate
. Como el método RPC es realmente solo un HTTP POST para el servidor, sería posible modificar el creationDate
cambiando la solicitud POST.
Una solución simple sería crear una serie de funciones RPC como changeName(String newName)
, etc., pero una clase con muchos campos requeriría muchos métodos para cada campo y sería ineficaz al cambiar muchos campos a la vez.
Me gusta la simplicidad de tener un único POJO que pueda usar tanto en el servidor como en el cliente GWT, pero necesito una forma de hacerlo de forma segura. ¿Algunas ideas?
EDITAR
que estoy de volver a presentar con una recompensa para tratar de ver si hay alguna otra idea. Tal vez mi pregunta original se centró demasiado en los detalles de GWT. Realmente creo que esta es una pregunta genérica para cualquier sistema que use JavaBeans para pasar datos entre un entorno seguro (contenedor de servlets) y un entorno inseguro (navegador web).
EDIT 2
También, para ser claros, I utilizado el campo creationDate
como un ejemplo del problema. En realidad, el código con el que estoy trabajando es más complicado con muchos campos diferentes.
Acerca de EDIT 2: No creo, hay mucha diferencia entre el campo creationDate y otros campos, excepto que creationDate puede tener algunas complejidades adicionales que son típicas para la gestión de fecha/hora. Los permisos son la forma habitual de manejar todos los datos que entran y salen; para algunos objetos/campos, esto es muy fácil al negar siempre todas las actualizaciones. Para otros objetos/campos, los permisos pueden ser muy elaborados, basados en comprobaciones en estructuras de datos complejas, evaluadas individualmente para cada usuario. En cualquier caso, los controles se realizan en el servidor; no los haga en el cliente. –