перенаправить с http на https и обратно на http в сервлете Java - PullRequest
0 голосов
/ 08 августа 2011

есть несколько ссылок на мой сервлет без https
Поскольку сервлет является универсальной формой, а URL-адреса http генерируются со случайным идентификатором, трудно использовать modrewrite или что-то в этом роде.

Поэтому я изменил свой сервлет с таким кодом:

//redirect to https
        String sec = servletRequest.getParameter("Sec");
        String qString = servletRequest.getQueryString();

        if (StringUtils.isEmpty(sec)){
              try {
                    HttpServletResponse rsp = request.getServletResponse(true);


                         String PORTAL_URL = l_aliasHelper.getPath(request);


              rsp.sendRedirect("https://"+servletRequest.getServerName() +PORTAL_URL+"?" +qString+"&Sec=yes");
              } catch (Exception e) {
              e.printStackTrace();
              }

        }

Теперь все отлично работает!

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

Так как мне снова перенаправить на http после того, как пользователь отправил форму?

Если все работает хорошо, пользователь получает ответ с сообщением об успехе по тому же URL-адресу, с которого он начал.

So the cycle goes like this: 
http://<somedomain>/<anypath>?<anyid>
https://<somedomain>/<anypath>?<anyid>&Sec=yes
and now it should go back maybe with a step inbetween to
http://<somedomain>/<anypath>?<anyid> <- the success message should be
displayed here

последний метод перед отображением сообщения:
sucessmessage.render (запрос, ответ)

запрос и ответ являются специфическими представлениями компонента appserver по всем вопросам, связанным с запросом / ответом У них есть методы, такие как:

getServletResponse

публичный HttpServletResponse getServletResponse (логический ответ)

Gets the original servlet response. Note: This should be accessed

только в исключительных случаях. Если для параметра установлено значение true, все дальнейшая обработка контента во время выполнения будет пропущена. Это доступно, только если запрос был инициирован из сервлета подключение.

Итак, как можно манипулировать ответом таким образом, чтобы форма была отправлена ​​в безопасном режиме, но впоследствии пользователь мог продолжить с http на остальной части сайта.

1 Ответ

1 голос
/ 08 августа 2011

Кажется, вы пытаетесь сделать слишком много в одном месте.Возможно, следующий разбив будет проще:

  • Укажите https в URL для параметра действия в форме HTML.
  • Создайте класс ServletFilter, который использует ServletRequest.isSecure(), чтобы убедиться, чтозапросы к вашему действию формы пришли через https.Это также может быть в вашем сервлете действий, но, сделав его фильтром, вы можете использовать его повторно.Просто убедитесь, что для защищенных сервлетов установлен этот фильтр.
  • В вашем сервлете действия формы просто отправьте перенаправление на страницу успеха через http
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...