2016-01-14 2 views
1

У меня есть веб-магазин, написанный на чистых JSP и JavaBeans, который развернут и отлично работает на Tomcat. У Tomcat была успешно настроена SSL. Он имеет только пять страниц:Как сделать мой jsp webapp swtich безопасным (HTTPS) для небезопасного (HTTP) протокола?

  • Домашняя страница (незащищенные страницы) - Отображение домашней страницы
  • страница продукта (незащищенные страницы) - отображение одного продукта все время
  • Корзина страницы (не являющихся -secure) - отображает страницу корзины после добавления продукта
  • Страница оплаты (защищенная страница) - отдельная страница проверки, содержащая всю информацию, такую ​​как адрес клиента, способ оплаты, способ доставки и т. д.
  • Страница получения (защищенная страница) - Создает заказ № и отображает общую сумму заказа.

Всякий раз, когда я перейти из корзины страницы Оформить заказ страницы браузер автоматически переключает протокол из http -> https и порта от 8080 -> 8443, который, как ожидалось. Однако проблема заключается в том, что он просто не переключает его обратно с https -> http и 8443 -> 8080 всякий раз, когда пользователь переходит со страницы «Проверка» на страницу «Главная страница/продукт». Страница url Home/Product and Cart url превращается в защищенные страницы, которые я не хочу.

web.xml Структура

<!-- Security for Checkout module --> 
<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>mycheckout</web-resource-name> 
     <url-pattern>/jsp/checkout/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

Папка:

jsp/ 
    home.jsp 
    product.jsp 
    cart.jsp 
    checkout/ 
     checkout.jsp 
     receipt.jsp 
+0

Вы смогли это решить? – Perdomoff

+0

Вы не просите об этом, поэтому я добавляю его только как комментарий: я бы не стал беспокоиться об этом. Если вы все равно настроили https, не беспокойтесь о возврате. Смешанный режим обычно вызывает больше проблем, чем решает: вы, вероятно, будете пропускать файлы cookie сеанса в http, которые могут использоваться с страницами https. Если не сейчас, то со следующей итерацией вашего приложения. Спасите себя от хлопот и просто заходите на https. У вас будет меньше работы таким образом, он уже настроен. И еще несколько циклов процессора дешевле, чем ваше рабочее время, или потерять репутацию из-за такой проблемы. –

+0

@Olaf - интересное решение, но просто интересно, не будет ли сайт медленнее обычного с https? – user2325154

ответ

1

Вы можете построить URL перед перенаправлением:

if(request.getScheme().equals("https"){ 
String redirect = "http://"+ request.getServerName()+":"+ getServletContext().getInitParameter("http_port")+"/"+request.getContextPath()+"/myurl"; 
response.sendRedirect(redirect); 
} 

Edit:

Переадресация на стороне клиента более универсальна, поскольку она может отправить вас на совершенно другой сервер или изменить протокол (например, от HTTP до HTTPS), или и то, и другое. И браузер узнает о новом URL-адресе. Но он требует дополнительной поддержки между сервером и клиентом. См. Последний ответ здесь: requestDispatcher Interface Vs sendRedirect

+0

Вместо перенаправления, как я могу переслать URL? – user2325154

+0

@ user2325154, см. Мое редактирование – Perdomoff

Смежные вопросы