Обработка данных в веб-приложении с помощью GWT, Struts и Hibernate

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

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

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

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

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

Мы будем признательны за любые комментарии/разъяснения. Большое спасибо!


person tomato    schedule 05.02.2009    source источник


Ответы (3)


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

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

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

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

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

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

person Chii    schedule 07.02.2009

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

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

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

person rustyshelf    schedule 06.02.2009
comment
если вы используете спящий режим, ваш объект домена не может быть сериализован gwt, даже если он содержит только сериализуемые объекты gwt. это потому, что hibernate проксирует результаты, особенно наборы/списки. вы будете использовать DTO, если только объекты, участвующие в rpc, не находятся в спящем режиме. - person Chii; 07.02.2009

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

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

person iftee    schedule 30.10.2009