JSP - не удается поддерживать сеанс между страницей http и страницей https - PullRequest
2 голосов
/ 26 октября 2010

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

Моя настройка следующая: Apacheсервер (внешний интерфейс), Tomcat 6.0 (внутренний интерфейс), сертификат RapidSSL находится на сервере Apache, мой сайт состоит из Java Server Pages.

Проблема:
У меня есть несколько страниц, которые находятся под https, в то время как остальные страницы сайта находятся под http.У меня есть страница входа в систему по адресу https, и я заметил, что при входе в систему и перенаправлении на страницу http сеанс не поддерживается.Он создает новую, в результате чего пользователь отправляется на мою страницу «истек срок действия сеанса», и после успешного входа в систему он будет перенаправлен на другую страницу.

Вопросы:
Почему сеанс не поддерживается при переключении с https на http?

Как решить эту проблему?Мне нужно, чтобы атрибуты сеанса, созданные на страницах http, присутствовали на страницах https, поэтому, когда пользователь снова перенаправляется на страницу http, сеанс не воссоздается и атрибуты теряются.

Пожалуйста, задавайте мне любые вопросы, которые вы считаете необходимыми, чтобы помочь мне понять это.Я очень ценю любую помощь, которую я получаю.Этот вопрос стал для меня камнем преткновения, тем более что мне явно не хватает «опыта», чтобы понять это самому.

Ответы [ 4 ]

3 голосов
/ 26 октября 2010

Разрешение пользователю использовать тот же сеанс после входа в систему является уязвимостью безопасности.Tomcat по умолчанию не позволяет переносить сеансы с SSL на не SSL-страницы.

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

1 голос
/ 26 октября 2010

Вероятно, вы используете «безопасные куки» для поддержки сеанса: эти куки не распространяются от HTTPS к HTTP. Как правило, это хорошая вещь.

Вы можете не делать этого, но когда вы переносите сеанс из HTTPS в HTTP, вы должны быть особенно осторожны, чтобы не допустить его повторного использования через HTTPS позже, поскольку он мог быть скомпрометирован.

0 голосов
/ 16 ноября 2010

У меня та же проблема, когда некоторые части сайта являются https, а некоторые - http.Я обнаружил, что с Tomcat сессионные куки-файлы, созданные по протоколу http, без проблем переносятся на https, однако при переходе на http-файлы теряются сессионные куки-файлы, созданные по протоколу https.

Одно решение, которое я нашел, поддержание сессии в качестве пользователяпутешествует по сайту, это отскакивает от пользователя, когда он впервые появляется.Я создал RequestFilter со следующим кодом:

if (request.isSecure() && session.isNew()) { // session cookie created over ssl
    try { session.invalidate(); }
    catch (Exception e) { /* handle error */ }
    String url = request.getRequestURI().replaceFirst("https", "http");
    response.sendRedirect(url);
}
else if (!request.isSecure()) {
    String url = request.getRequestURI().replaceFirst("http", "https");
    response.sendRedirect(url);
}

Это вынуждает новые сеансы не использовать SSL для создания долговременного файла cookie сеанса, а затем, когда сеанс существует, пользователь перенаправляется обратно к защищенному запросу.Это приводит к тому, что сеанс остается живым.

Или вот варианты, которые включают в себя меньше суеты, просто перезаписать файл cookie сеанса другим, который не является безопасным:

if (request.isSecure() && session.isNew()) {
    Cookie c = new Cookie("JSESSIONID", request.getSession().getId());
    c.setSecure(false);
    response.addCookie(c);
}
0 голосов
/ 26 октября 2010

Используете ли вы простой обратный прокси для подключения к Tomcat? В этом случае используйте mod_proxy_ajp, чтобы использовать AJP для подключения HTTP-сервера Apache к серверу приложений Tomcat.

...