Другие стратегии для реализации <sql: query>

1

Я использую JSTL для извлечения значений из моей базы данных и отображения их на моей странице jsp с использованием аналогичного кода, как показано ниже.

<sql:setDataSource
var="myDS"
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/mydb"
user="root" password="secret"
/>

<sql:query var="list_users" dataSource="${myDS}">
SELECT * FROM users;
</sql:query>

<c:forEach var="user" items="${listUsers.rows}">

<c:out value="${user.name}" />

<c:out value="${user.email}" />

<c:out value="${user.profession}" />

</c:forEach>

Мой руководитель группы посоветовал мне, чтобы не было правильной практики отправлять запросы непосредственно на страницу jsp. Поскольку в этом коде есть имя базы данных, имя пользователя и пароль, я не уверен, реализует ли этот код надлежащую безопасность. Я хотел бы знать ваши мысли по этому вопросу, и если есть какая-либо альтернатива, чтобы сделать это, используя JSTL.

Теги:
jsp
jstl
java-ee

2 ответа

4
Лучший ответ

Поскольку JSTL выполняется на стороне сервера, нет дыры в безопасности, потому что запрос не может быть замечен клиентами приложения. Существуют и другие проблемы с этим подходом:

  • Запрос не может использоваться повторно. Если вам это нужно на других страницах, вам нужно будет повторить запрос. Когда у вас есть простые запросы, подобные этому, вы не можете проверить проблему, но это связано с более сложными операциями, которые также нуждаются в параметрах.
  • Вы создаете соединение вручную на странице! Это замедлит ваше приложение. Используйте правильный источник данных для пула соединений с базой данных, настроенного как ресурс или программно (например, C3PO или BoneCP)

Переместите весь код базы данных в соответствующие классы уровня доступа к данным. И используйте <sql> для JSTL только для учебных целей, а не для приложений реального мира.

Больше информации:

1

Вы действительно должны делать свой запрос в своем классе java, а не в jsp, как советует ваш руководитель.

На стороне безопасности это не имеет особого значения, весь код доступен на сервере, jsp или java. Тег sql не должен выводить эту информацию на сгенерированную страницу.

Но на самом деле вопрос касается правильного использования технологий:

jsp используется как шаблон, он должен принимать данные и показывать их конечному пользователю. Некоторая базовая операция может быть выполнена путем циклизации жизненного цикла в списке данных или формировании данных, но это должно быть только для представления, которое вы хотите сделать

java-контроллер используется для восстановления данных и настройки представления по мере необходимости, как для использования jsp, а какие данные для отправки в jsp

Ещё вопросы

Сообщество Overcoder
Наверх
Меню