Обработка данных в веб-приложении с помощью GWT, Struts и Hibernate - PullRequest
1 голос
/ 05 февраля 2009

Я пишу веб-приложение, используя Struts и Hibernate. Недавно я обнаружил GWT и API визуализации . Все это выглядело очень интересно и обеспечивает функции AJAX, которые нужны моему приложению. Я новичок, который довольно смущен ....

Где поставить проверки уровня доступа к данным?

В веб-приложении пользователи имеют разный уровень доступа к данным. например различные комбинации прав на чтение / запись для разных данных. Будет некоторый профиль пользователя, который приложение проверяет, когда к любым данным обращаются или изменяются. Пользователю будет предоставлен доступ к данным в соответствии с результатом - отказано в доступе к просмотру или он может видеть данные, но не может их изменить и т. Д. Я не уверен, где поставить эту конкретную проверку. Я думаю, я мог бы закодировать его в DAO , каждый раз, когда обрабатывается операция с данными, вручную проверяйте запрашиваемые данные по профилю. Или поместите его в слой бизнес-логики / отображения , если у пользователя нет прав доступа к данным, уберите кнопку у пользователя. Или оба ? Или в hibernate есть файл конфигурации , где я могу указать привилегии доступа к данным для всех сопоставленных таблиц?

Лучшая практика для передачи информации вокруг

Существует большая потребность в обмене данными между моделью / видом / контроллером, вызовом RPC для GWT и передачей данных в код визуализации для визуализации диаграмм и прочего. Я предполагаю, что определенно нужен какой-то переводчик , который преобразует объекты Java в объекты JSON, чтобы выполнять вызовы gwt-rpc и рисовать диаграммы с помощью API визуализации. Я прав? Кроме того, с точки зрения передачи информации в Struts и Hiberante - написание Data Transfer Objects хорошая идея? Тогда просто пропустите бобов все время? Или (я только что столкнулся с этим сегодня ... даже не уверен, правильно ли я понял), возможно, привяжите объекты к JNDI и получите доступ к ним из других частей программы?

Любой вклад / уточнение будет оценено. Большое спасибо!

Ответы [ 3 ]

2 голосов
/ 07 февраля 2009

проверка уровня доступа:

Я бы разделил проверки уровня доступа на свой собственный класс, и ваши «контроллеры» сначала должны вызывать диспетчеров доступа, прежде чем вызывать DAO. то есть каждое действие выполняет проверку перед выполнением вызовов DAO для получения / вставки данных.

но лучший способ, если вы используете gwt, это делать вызовы RPC вместо использования действий Struts. вызовы rpc становятся «контроллерами», о которых я упоминал выше, и могут выполнять проверки доступа, используя менеджеров, которых я упомянул выше, то есть устранять действия.

что касается менеджеров доступа, я рекомендую перечислить все гранулярные привилегии доступа и объединить эти привилегии в набор, который может быть связан с каждым пользователем / профилем / чем угодно.

прохождение информации вокруг gwt - боль в работе с hibernate - вы можете попробовать использовать Gilead , но я не добился большого успеха, это слишком громоздко для меня. Ваша идея конвертации в json - правильный путь в GWT IMHO. gwt 1.5 поддерживает так называемое наложение объектов javascript, которое позволяет вам возвращать json и «накладывать» его на java-объект gwt непосредственно с небольшим количеством кода с вашей стороны. проверьте этот пост для получения дополнительной информации.

другой метод состоит в том, чтобы развернуть свое собственное средство генерации DTO (именно это и должен делать Gilead, но я не думаю, что он выполняет автогенерацию? Не уверен). реализовать его как часть вашей сборки. это немного дополнительной работы, которая не будет стоить того, если это не большой проект.

1 голос
/ 06 февраля 2009

Я не могу много говорить о вашем первом вопросе, потому что мне действительно не нравится использовать Struts для всего, что связано с GWT.

Что касается вашего второго вопроса, нет, вам не нужно использовать JSON. Похоже, ваш бэкэнд - это Java, а это означает, что механизм GWT RPC будет работать только с POJO. Таким образом, вы просто создадите объекты, необходимые для рисования, и передадите их между вашим клиентом и сервером. GWT сделает все для вас RPC из коробки.

Запись объектов Data Transfer может быть необходима, но только если ваши файлы модели Hibernate содержат вещи, которые не может понять компилятор GWT. Обычно я использую EJB3 и Stripes (вместо Hibernate и Struts), и в моем случае мне никогда не нужно писать какие-либо объекты передачи данных, я просто использую EJB3 POJO и передаю их между моим клиентом и сервером.

0 голосов
/ 30 октября 2009

Проверка уровня доступа к данным на стороне сервера - самый безопасный способ. Но все же GWT генерирует упакованный JS. Вы можете сделать это на стороне клиента. Но в этом случае каждый раз необходимо проверять / получать профиль пользователя на стороне сервера.

передача информации: я использую строки с разделителями в векторе. И он работает хорошо ...

...