Использовать HTTPS только для определенных страниц в веб-приложении на основе сервлетов - PullRequest
7 голосов
/ 25 августа 2009

У меня есть веб-приложение на основе сервлетов, работающее на сервере Tomcat 6. Схема URL-адреса HTTPS. Весь сайт в настоящее время обслуживается по HTTPS. Но то, что я действительно хотел бы сделать, это настроить HTTPS только для определенных операций, таких как покупка и вход в систему. Есть ли какая-либо конфигурация в Tomcat, которая может помочь мне сделать это легко?

Есть ли какие-либо изменения кода, необходимые для сохранения сеанса через HTTPS и HTTP?

Ответы [ 2 ]

11 голосов
/ 16 сентября 2009

Действительно, в идеале это настраивается в файле 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>
2 голосов
/ 25 августа 2009

Вам просто нужно установить коннектор HTTP, и весь ваш сервлет будет доступен и по HTTP.

Для операций, требующих HTTPS, вам нужно выполнить это самостоятельно, как это,

if (!request.isSecure()) {
    response.sendError(HttpServletResponse.SC_FORBIDDEN);
    return;
}

В нашем случае, URL-адрес для входа может быть введен пользователем, поэтому мы перенаправляем пользователя на страницу HTTPS, если введен HTTP-URL.

Если вы говорите о сеансах сервлета (JSESSIONID), у вас не должно возникнуть проблем с совместным использованием сеансов между HTTP и HTTPS, поскольку Tomcat не добавляет флаг «безопасный» в файлы cookie.

...