У меня есть POJO в Google Web Toolkit, который я могу получить с сервера.Безопасность при использовании GWT RPC
class Person implements Serializable {
String name;
Date creationDate;
}
Когда клиент вносит изменения, я сохранить его обратно на сервер с помощью GWT RemoteServiceServlet так:
rpcService.saveObject(myPerson,...)
Проблема заключается в том, что пользователь не должен быть в состоянии изменить creationDate
. Поскольку метод RPC - это действительно HTTP-сообщение HTTP для сервера, можно было бы изменить creationDate
, изменив запрос POST.
Простым решением было бы создать ряд функций RPC, таких как changeName(String newName)
и т. Д., Но с классом со многими полями потребовалось бы много методов для каждого поля и было бы неэффективно изменять сразу несколько полей.
Мне нравится простота иметь одно POJO, которое я могу использовать как на сервере, так и на клиенте GWT, но для этого нужно сделать это безопасно. Есть идеи?
EDIT
Я с повторной передачей щедрот, чтобы попробовать и посмотреть, если есть какие-либо другие идеи. Возможно, мой первоначальный вопрос слишком сфокусировался на специфике GWT. На самом деле я думаю, что это общий вопрос для любой системы, которая использует JavaBeans для передачи данных между безопасным (контейнер сервлетов) и небезопасной (веб-браузером) средой.
РЕДАКТИРОВАТЬ 2
Кроме того, чтобы быть ясно, я использовал поле creationDate
в качестве примера проблемы. На самом деле код, с которым я работаю, более сложный с множеством разных полей.
О EDIT 2: Я не думаю, что существует большая разница между полем createDate и другими полями, за исключением того, что у creatDate могут быть несколько дополнительных сложностей, характерных для обработки даты и времени. Разрешения - это обычный способ обработки всех входящих и выходящих данных - для некоторых объектов/полей это очень просто, всегда отрицая все обновления. Для других объектов/полей разрешения могут быть очень сложными, основываясь на проверках сложных структур данных, оцениваемых индивидуально для каждого пользователя. В любом случае проверки выполняются на сервере - не делайте их на клиенте. –