Используйте HTTPS только для определенных страниц в веб-приложении на основе сервлетов.
Вопрос
У меня есть веб-приложение на основе сервлетов, работающее на сервере Tomcat 6.Схема URL — HTTPS.Весь сайт в настоящее время обслуживается по протоколу HTTPS.Но что мне действительно хотелось бы сделать, так это настроить HTTPS только для определенных операций, таких как покупка и вход в систему.Есть ли какая-либо конфигурация в Tomcat, которая поможет мне легко это сделать?
Требуются ли какие-либо изменения кода для сохранения сеанса через HTTPS и HTTP?
Решение
Действительно, в идеале это настраивается в файле web.xml вашего веб-приложения.Вы просто указываете определенные URL-адреса, которые должны быть безопасными, поскольку <security-constraint><web-resource-collection>
и укажите требование HTTPS как <transport-guarantee>
со стоимостью CONFIDENTIAL
.Контейнер будет прозрачно управлять перенаправлениями.Простой.
<security-constraint>
<web-resource-collection>
<web-resource-name>My Secure Stuff</web-resource-name>
<url-pattern>/some/secure/stuff/*</url-pattern>
<url-pattern>/other/secure/stuff/*</url-pattern>
...
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Другие советы
Вам просто нужно настроить HTTP-коннектор, и все ваши сервлеты также будут доступны по HTTP.
Для операций, требующих HTTPS, вам необходимо обеспечить это самостоятельно следующим образом:
if (!request.isSecure()) {
response.sendError(HttpServletResponse.SC_FORBIDDEN);
return;
}
В нашем случае URL-адрес для входа может быть введен пользователем, поэтому мы перенаправляем пользователя на страницу HTTPS, если введен URL-адрес HTTP.
Если вы говорите о сеансах сервлетов (JSESSIONID), у вас не должно возникнуть проблем с разделением сеансов между HTTP и HTTPS, поскольку Tomcat не добавляет флаг «безопасности» в файлы cookie.